Herokuで100件の画像アップロードを試したところ、タイムアウトエラーが起きてしまいました。
最大200件くらいのアップロードを想定しています。
下記の、original_insurance_file.save!をoriginal_insurance_file.save.delayにしてバックグラウンド処理にする方法が良いでしょうか?
以下のgemを利用することも考えましたが、更新されておらずあまり使わない方がいいかなと思っています。
https://github.com/lardawge/carrierwave_backgrounder
ruby
1= f.file_field(:files, multiple: true, accept: '.png')
ruby
1class OriginalInsuranceFilesController < ApplicationController 2 before_action :set_staff_master, only: [:destroy] 3 4 def create 5 if OriginalInsuranceFile.bulk_save_original_file_name(original_insurance_files) 6 else 7 flash.now[:danger] = t('common.create.failed') 8 redirect_to original_insurance_files_path 9 end 10 end 11 12 private 13 14 def original_insurance_files 15 params[:original_insurance_file][:files].to_a 16 end 17end
ruby
1class OriginalInsuranceFile < ApplicationRecord 2 extend Enumerize 3 4 mount_uploader :url, InsuranceFileUploader 5 6 def self.bulk_save_original_file_name(files) 7 files.each do |file| 8 file_name = File.basename(file.original_filename, '.*') 9 staff_no = file_name.match("_").pre_match 10 submit_type = file_name.match("_").post_match 11 staff_master = Staff.find_by(staff_no: staff_no) 12 13 if file_name && staff_no && submit_type && staff_master 14 original_insurance_file = OriginalInsuranceFile.new 15 original_insurance_file.assign_attributes(url: file, file_type: submit_type, staff_master: staff_master) 16 original_insurance_file.save! 17 end 18 end 19 end 20end
ruby
1class InsuranceFileUploader < CarrierWave::Uploader::Base 2 def store_dir 3 "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 4 end 5 6 def extension_allowlist 7 %w(png) 8 end 9 10 def size_range 11 0..2.megabytes 12 end 13end 14
参考になるかわからないですが・・・
Heroku公式:https://devcenter.heroku.com/ja/articles/request-timeout
ダイレクトアップロード:https://railsguides.jp/active_storage_overview.html#%E3%83%80%E3%82%A4%E3%83%AC%E3%82%AF%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89
あなたの回答
tips
プレビュー