铁路延迟的工作问题。

时间:2010-06-15 21:36:42

标签: ruby-on-rails ruby delayed-job

我的控制器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它工作正常......有没有解决方案?

2 个答案:

答案 0 :(得分:1)

您应该检查数据库中的内容。延迟作业在运行时必须有内部字符串或ID:最可能是

PARAMS [ 'Filedata上']

包含在作业稍后运行时无法恢复的内容。

答案 1 :(得分:0)

使用send_later应该可以正常工作。另一种方法是定义自己的类,以响应perform,并调用Delayed::Job.enqueue YourClass.new

你在某处有错误吗?