1

我的控制器 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,我在 delay_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) }

在读取参数 ['Filedata'].read 时。

如何检查我是否在 params['Filedata'] 中获取了正确的数据?没有 send_later 它工作正常......有什么解决方案吗?

4

2 回答 2

1

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

参数['文件数据']

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

于 2010-06-15T21:53:20.607 回答
0

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

你在某个地方有错误吗?

于 2010-06-15T21:43:09.120 回答