我在instructions之后在我的Rails应用程序中实现了延迟作业。
delayed_jobs
表rake jobs:work
/tmp/job.log
尚未编写(工作应该做什么)工作:
class CsvImportJob
def perform
File.open('/tmp/job.log', 'w') {|f| f.write("Hello") }
end
end
电话:
job = CsvImportJob.new
job.delay.perform
日志中没有任何内容
rake jobs:work
终端在启动消息后没有说什么:
[Worker(host:nico pid:25453)] Starting job worker
在rake jobs:work
运行时启动作业时,没有任何事情发生。
相反,当执行第"hello".delay.length
行时,delayed_jobs会对其进行处理,并且会显示消息String#length completed after 0.0556 - 1 jobs processed at 3.6912 j/s, 0 failed
。
答案 0 :(得分:2)
即使delayed_job作者也不知道原因。它以某种方式取决于您运行的网络服务器。试试wiki的推荐。
答案 1 :(得分:2)
我参加派对有点晚了,但也看看:
您的情况听起来不像是YAML反序列化错误,但是(正如WIKI建议的那样),您可以设置Delayed::Worker.destroy_failed_jobs = false
,以便失败的作业保留在表中,您可以检查错误的原因。 / p>
正如我想的那样:你确定工作人员任务知道CsvImportJob类吗?也就是说,csv_import_job.rb是否在Rails类的“众所周知”目录中定义?如果没有,那么工作人员任务将无法对其进行反序列化,这将导致您正在看到的行为。
如果由于某种原因,cav_import_job.rb不在一个众所周知的目录中,你可以始终require
来自初始化文件 - 这应该可以解决问题。