2015-04-24 62 views
0

每當我把代碼CarrierWave resize_to_limit控制器錯誤

process resize_to_limit: [400, 400] 

我的錯誤(我的應用程序工作沒有上面的代碼就好了。):

Errno::ENOENT in MicropostsController#create

沒有這樣的文件或目錄 - 識別

指向哪一行

@micropost = current_user.microposts.build(micropost_params) 

在我microposts_controller文件

我不知道是什麼導致我一直在這一個多小時了。有人可以向我解釋爲什麼會發生這種情況嗎?

這裏是我的代碼:

picture_uploader.rb

class PictureUploader < CarrierWave::Uploader::Base 

    include CarrierWave::MiniMagick 
    process resize_to_limit: [400, 400] 

    storage :file 


    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 


    def extension_white_list 
    %w(jpg jpeg gif png) 
    end 

end 

microposts_controller.rb

class MicropostsController < ApplicationController 
before_action :logged_in_user, only: [:create, :destroy] 
before_action :correct_user, only: :destroy 

def create 
    @micropost = current_user.microposts.build(micropost_params) 
    if @micropost.save 
     flash[:success] = "Micropost created!" 
     redirect_to root_url 
    else 
     @feed_items = [] 
     render 'static_pages/home' 
    end 
end 

def destroy 
    @micropost.destroy 
    flash[:success] = "Micropost deleted" 
    redirect_to request.referrer || root_url 
end 



private 

    def micropost_params 
     params.require(:micropost).permit(:content, :picture) 
    end 


    def correct_user 
     @micropost = current_user.microposts.find_by(id: params[:id]) 
     redirect_to root_url if @micropost.nil? 
    end 

end 

UPDATE

我修復了錯誤,導致它的錯誤是我沒有從Homebrew安裝ImageMagick。 :)

+0

這是否發生在您的本地開發環境或遠程服務器上?問題似乎是文件(臨時文件或轉換文件)無法保存在'def store_dir'中定義的文件夾中。它可能還不存在,但據我所知,Carrierwave應該創建它。我的建議: - 檢查文件夾是否有任何奇怪的權限,可能會阻止文件被保存 - 使用一個更簡單的路徑,比如'/ uploads',並記住創建上傳文件夾 – thirdsun

+0

我在我的本地開發環境。我檢查過臨時文件夾,我上傳的圖像已發送到那裏。 – Jedi

+0

最終的轉換後的圖像已保存在臨時文件夾中?這看起來不正確。它應該在您在* store_dir中設置的文件夾中。再次嘗試簡化store_dir,使用一個確實存在的簡單文件夾,並避免現在的任何動態字符串插值。看看它是否有效,並從那裏去。 – thirdsun

回答

0

如果它只是圖像魔術問題,你可以寫你的條件驗證。像if Rails.env.production?這是生產中用於發送載波圖像霧只留下文件進行開發。

顯然,這意味着您的驗證只在生產環境中運行,所以你不會在發展得到調整大小,但如果你在測試這兩種都不會有問題儘可能使實際上傳工作。這是一個解決方案,但無縫訪問手動測試,而無需安裝任何東西。