3

我在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. 如果我删除所有的perform方法内容-旧代码旧代码被执行
  4. 带有类和执行的新 .rb 文件,将此类入队 - 完美运行
  5. 如果我在新文件的执行中更改某些内容并再次运行作业 - 执行旧代码

在每次更改之间,我都重新启动了服务器。似乎乘客或其他东西可以保存类缓存。

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

谢谢!

4

2 回答 2

2

如果您运行延迟的作业工作者,那么您需要重新启动它们以重新加载代码。另外,请记住,每个工作人员都会加载自己的导轨实例。

于 2011-06-26T06:13:53.167 回答
2

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

然后我使用https://github.com/tobi/delayed_job/wiki/Running-Delayed::Worker-as-a-daemon作为 worker 启动,效果很好。

于 2009-12-29T15:18:10.713 回答