carrierwave_backgrounderでファイルのアップロードを非同期で行おうとしていたのですが、うまくアップロードできません。
バージョンは以下の通りです。
- rails 5.2.6
- ruby 2.7.3
- Redis server 6.2.4
- sidekiq 6.2.1
- carrierwave 1.3.2
- carrierwave_backgrounder 0.4.2
redis-serverは起動しています。
sidekiqは「bundle exec sidekiq -q carrierwave」で起動しています。
view、controllerは以下です。
html
1// new.html.erb 2 3<form id="upload_files_form" action="/files/upload" accept-charset="UTF-8" data-remote="true" method="post"> 4 <input name="utf8" type="hidden" value="✓"> 5 <div class="content-wrapper"> 6 <div class="object-content"> 7 <p class="text"> 8 <div class="field"> 9 <input type="file" name="image" id="image"> 10 </div> 11 </div> 12 <div class="actions"> 13 <input type="submit" name="commit" value="アップロード" data-disable-with="登録"> 14 </div> 15 </div> 16</form>
ruby
1# files_controller 2 3def upload 4 @file = ObjectFile.new(image: params[:image]) 5 6 respond_to do |format| 7 if @file.save 8 format.html { redirect_to @file, notice: 'User was successfully created.' } 9 format.json { render json: @filet, status: :created } 10 else 11 format.html { render action: "new" } 12 format.json { render json: @file.errors, status: :unprocessable_entity } 13 end 14 end 15end 16 17private 18 19def file_params 20 params.require(:file).permit(:image) 21end
fileモデルのカラムは、id, image, image_tmp, image_processing です。
この後、問題なくshow.html.erbが表示されますが、
作成されたレコードを見てみるとimage_tmpが保存されていません。
image_processingはtrueになっています。
モデル、アップローダー等は以下のように設定しています。
モデル
ruby
1# models/file.rb 2class File < ApplicationRecord 3 mount_uploader :image, FileUploader 4 process_in_background :image 5 store_in_background :image 6 7end
アップローダー
ruby
1# file_uploader 2class FileUploader < CarrierWave::Uploader::Base 3 include ::CarrierWave::Backgrounder::Delay 4 5 def store_dir 6 "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 7 end 8end
ruby
1# config/initializers/carrierwave_backgrounder.rb 2CarrierWave::Backgrounder.configure do |c| 3 c.backend :sidekiq, queue: :carrierwave 4end
sidekiqのログをみると、
2021-07-23T06:11:28.009Z pid=98218 tid=1s42 class=CarrierWave::Workers::StoreAsset jid=6d287c34daacf5eff1f7f898 INFO: start
uploads
2021-07-23T06:11:28.043Z pid=98218 tid=1s42 class=CarrierWave::Workers::StoreAsset jid=6d287c34daacf5eff1f7f898 elapsed=0.034 INFO: done
となり、storeされているはずなのですが、imageカラムをrails consoleで確認するとnilのままです。
rails サーバーのログにはエラーは表示されていませんでした。
ファイルがアップロードされない原因を知りたいです。
何かご教示いただけることがあればよろしくお願いいたします。
あなたの回答
tips
プレビュー