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。 :)
這是否發生在您的本地開發環境或遠程服務器上?問題似乎是文件(臨時文件或轉換文件)無法保存在'def store_dir'中定義的文件夾中。它可能還不存在,但據我所知,Carrierwave應該創建它。我的建議: - 檢查文件夾是否有任何奇怪的權限,可能會阻止文件被保存 - 使用一個更簡單的路徑,比如'/ uploads',並記住創建上傳文件夾 – thirdsun
我在我的本地開發環境。我檢查過臨時文件夾,我上傳的圖像已發送到那裏。 – Jedi
最終的轉換後的圖像已保存在臨時文件夾中?這看起來不正確。它應該在您在* store_dir中設置的文件夾中。再次嘗試簡化store_dir,使用一個確實存在的簡單文件夾,並避免現在的任何動態字符串插值。看看它是否有效,並從那裏去。 – thirdsun