def filename if original_filename.blank? return end "#{SecureRandom.hex(5)}#{File.extname(original_filename)}" end
Uploader のファイル名をこんな感じで決めているのですが
def filename if original_filename.blank? return end tmp = "#{SecureRandom.hex(5)}#{File.extname(original_filename)}" puts tmp tmp end
のようにデバッグメッセージをはさんでみると
update 時に計4回よばれていて最初の3回は同じなのですが最後の1回だけ別の名前になってしまいます
S3に保存されているのは最後の1回の名前で データベースに入ってるのは最初の3回の名前になっています
なぜこういうことがおこるのでしょうか
そもそも4回呼ばれる理由もわからないのですが
Carrierwave はブラックボックスが多すぎて原因が全くわからずどこからデバッグすればいいのでしょうか…
追記
def filename Util.log @f if original_filename @f ||= "#{SecureRandom.hex(5)}#{File.extname(original_filename)}" end Util.log @f @f end
のようにログを増やしてみたのですが
最後の1回だけ @f が nil になってしまいます
なので別にインスタンスが作られているとしか思えません…
Util.log caller.select{|r| r.index('/home') == 0}.join("\n")
トレースをはさんでみたのですが4回とも同じコントローラーの update から呼び出されていました
コントローラはほとんど手を付けていないデフォルトです
もちろんその update が実行されたのは1回だけです
def update Util.log 'update' respond_to do |format| if @user.update(user_params)
もうわけがわかりません
追記
class UserImageUploader < ImageUploader # リサイズしたり画像形式を変更するのに必要 include CarrierWave::MiniMagick process :store_dimensions # サイズを半分にしたものを生成してそのサイズを保存する version :half do process :resize end def resize Util.log 'resize' resize_to_fit model.resize[0], model.resize[1] end def store_dimensions if file && model resize = MiniMagick::Image.open(file.file).dimensions resize[0] = resize[0] / 2 resize[1] = resize[1] / 2 model.resize = resize end end end def url "#{Settings.api.images}#{self.half.current_path}" end
このリサイズしたバージョンのイメージを作らなければ2回呼ばれるだけで正常に保存できるようです
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/03/26 02:37