我的控制器data_files_controller.rb
def upload_balances
DataFile.load_balances(params)
end
我的模型data_file.rb
def self.load_balances(params)
# Pull the file out of the http request, write it to file system
name = params['Filename']
directory = "public/uploads"
errors_table_name = "snapshot_errors"
upload_file = File.join(directory, name)
File.open(upload_file, "wb") { |f| f.write(params['Filedata'].read) }
# Remove the old data from the table
Balance.destroy_all
# ------ more code-----
end
工作正常。现在我想用我的控制器使用延迟作业来调用我的模型动作,如... 我的控制器data_files_controller.rb
def upload_balances
DataFile.send_later(:load_balances,params)
end
有可能吗?另一种方法是什么?它会造成任何问题吗?
使用此send_later,我在delayed_job表的last_error列中收到此错误。
uninitialized stream
C:/cyncabc/app/models/data_file.rb:12:in `read'
C:/cyncabc/app/models/data_file.rb:12:in `load_balances'
C:/cyncabc/app/models/data_file.rb:12:in `open'
我在线上遇到错误
File.open(upload_file, "wb") { |f| f.write(params['Filedata'].read) }
阅读params ['Filedata']。阅读。
如何检查我是否在params ['Filedata']中获得了正确的数据? 没有send_later它工作正常......有没有解决方案?
答案 0 :(得分:1)
您应该检查数据库中的内容。延迟作业在运行时必须有内部字符串或ID:最可能是
PARAMS [ 'Filedata上']
包含在作业稍后运行时无法恢复的内容。
答案 1 :(得分:0)
使用send_later
应该可以正常工作。另一种方法是定义自己的类,以响应perform
,并调用Delayed::Job.enqueue YourClass.new
你在某处有错误吗?