尽管从delayed_jobs表中立即消失,但延迟的作业仍未执行

时间:2011-10-21 06:46:22

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

我在instructions之后在我的Rails应用程序中实现了延迟作业。

  1. 我启动了Rails应用
  2. 我点击了启动延迟作业的链接
  3. 该作业在数据库的delayed_jobs
  4. 中可见
  5. 我运行rake jobs:work
  6. 工作从表中消失,所以我猜工作已经完成
  7. 但问题: /tmp/job.log尚未编写(工作应该做什么)
  8. 工作:

    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

2 个答案:

答案 0 :(得分:2)

请参阅文档中的https://github.com/collectiveidea/delayed_job/wiki/Common-problems#wiki-undefined_method_xxx_for_class

即使delayed_job作者也不知道原因。它以某种方式取决于您运行的网络服务器。试试wiki的推荐。

另见delayed_job: NoMethodError

答案 1 :(得分:2)

我参加派对有点晚了,但也看看:

https://github.com/collectiveidea/delayed_job/wiki/Common-problems#wiki-jobs_are_silently_removed_from_the_database

您的情况听起来不像是YAML反序列化错误,但是(正如WIKI建议的那样),您可以设置Delayed::Worker.destroy_failed_jobs = false,以便失败的作业保留在表中,您可以检查错误的原因。 / p>

更新

正如我想的那样:你确定工作人员任务知道CsvImportJob类吗?也就是说,csv_import_job.rb是否在Rails类的“众所周知”目录中定义?如果没有,那么工作人员任务将无法对其进行反序列化,这将导致您正在看到的行为。

如果由于某种原因,cav_import_job.rb不在一个众所周知的目录中,你可以始终require来自初始化文件 - 这应该可以解决问题。