delayed_job - 执行不是最新的代码?

时间:2009-12-28 20:13:25

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

我在site5.com共享主机上使用delayed_job(试过tobi和collective_idea),乘客作为rails环境。 我设法完成了工作。 但是,似乎插件在首次运行后忽略了作业类源代码中的任何更改。 我已经在每次更改(touch tmp/restart.txt)时重新启动了服务器,但它仍然忽略它。

示例:

档案:lib/xx_job.rb

class XxJob
  def perform
    Rails.logger.info "XX START"

    TempTest.delete_all

    i = 0
    10.times {
      i+=1
      TempTest.create(:name => "XXX")
      sleep(1)
    }

    Rails.logger.info "XX END"
  end
end

在一个简单的控制器中,我打电话:

Delayed::Job.enqueue(XxJob.new)

结论我收集了:

  1. 如果我将xx_job.rb更改为xx_job1.rb - 控制器上出错
  2. 如果我将类XxJob更改为类XxJob1 - 控制器上的错误
  3. 如果我删除所有执行方法内容 - 执行旧代码旧代码
  4. 带有类和执行的新.rb文件,将此类入队 - 完美运行
  5. 如果我更改了新文件的执行并再次运行作业 - 执行旧代码
  6. 在每次更改之间,我都重新启动了服务器。 似乎Passenger或其他东西可以节省类缓存。

    如何删除此缓存?是存储在服务器的某个地方吗? (我希望我可以从共享主机访问它)

    谢谢!

2 个答案:

答案 0 :(得分:2)

最终我想到了 - 几个工作人员在后台运行,他们每个人都找到了工作并拥有自己的缓存。 我不知道如何杀死他们,所以我改变了桌子的名字几秒钟。那杀了他们:)

然后我使用http://wiki.github.com/tobi/delayed_job/running-delayedworker-as-a-daemon作为工作者开始,它运作良好。

答案 1 :(得分:2)

如果您运行延迟的作业工作程序守护程序,则需要重新启动它们以重新加载代码。另外,请记住,每个工作人员都会加载自己的rails实例。