resqueでバックグラウンドジョブを使用してCSVファイルをインポートしようとしています。走っているように見えますが、何も起こりません。私はresqueを使用していなかったときにインポートが正常に機能しました(いくつかのインポートが大きいので、いくつかのインポートが大きいので、小さな2行のCSVをテストするためにバックグラウンドジョブに移りたいので使用しています)Ruby resque background CSVインポートが実行されません
あなたは非常に! (も初心者イムので、任意の助けダウンダム喜ば:))
inventories_controller.rb:
def import
Resque.enqueue(Inventorycsvimport, params[:file], current_user.id)
redirect_to root_url, notice: "Inventory import job started."
end
ワーカーJOBのinventorycsvimport.rb:
class Inventorycsvimport
@queue = :Inventorycsvimport
def self.perform()
Inventory.destroy_all(user_id: current_user.id)
Inventory.import(params[:file], current_user.id)
end
end
インポートクラスinventory.rb:
class Inventory < ApplicationRecord
belongs_to :user
def self.import(file, user_id)
allowed_attributes = [ "user_id", "id","description","part_number","price","created_at","updated_at", "alternate_part_number", "condition_code", "qty", "mfg_code", "serial_number", "part_comments"]
spreadsheet = open_spreadsheet(file)
header = spreadsheet.row(1)
(2..spreadsheet.last_row).each do |i|
row = Hash[[header, spreadsheet.row(i)].transpose]
inventory = find_by_id(row["id"]) || new
inventory.attributes = row.to_hash.select { |k,v| allowed_attributes.include? k }
inventory.user_id = user_id
inventory.save!
end
end
def self.open_spreadsheet(file)
case File.extname(file.original_filename)
when ".csv" then Roo::CSV.new(file.path)
when ".xls" then Excel.new(file.path, nil, :ignore)
when ".xlsx" then Excelx.new(file.path, nil, :ignore)
else raise "Unknown file type: #{file.original_filename}"
end
end
end
これはジョブで発生するエラーです。
ステップバイステップを試してみましたが、実際に失敗したところで試しましたか?あなたの結果を同じように提供してください – Bijendra
'current_user'をどのようにしてジョブの中に入れますか?パラメータとして渡されていないようです。それは仕事の中で「無」であるかもしれません。その場合、 'inventory'は有効な' user'を必要とするため、検証は失敗します。この場合、保存されず、何も起こりません( 'ValidationError'が生成されるので、' – Kkulikovskis
@Kkulikovskisコントローラを変更しました:def import Resque.enqueue(Inventorycsvimport、params [:file]、current_user.id) redirect_to root_url、注意:「インベントリインポートジョブが開始しました。 終わり、今私が得る例外 NameError エラー 未定義のローカル変数やメソッドInventorycsvimportため 'CURRENT_USER」:クラス –