2009-12-28 40 views
3

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

例子:

文件: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 

在一个简单的控制器I拨打:

Delayed::Job.enqueue(XxJob.new) 

结论我已经收集:

  1. 如果我改变xx_job。 rb到xx_job 1.rb - 控制器上的错误
  2. 如果我改变类XxJob类XxJob1 - 错误控制器
  3. 。如果我删除所有的执行方法的内容 - 在执行旧代码,旧代码
  4. 新的.rb文件带班并执行,排队这一类 - 完美的作品
  5. 如果我更改了新文件的执行,并再次运行工作的东西 - 旧的代码被执行

我做了一个重启服务器的每一个变化之间。 它似乎像乘客或其他东西保存类缓存。

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

谢谢!

+0

你见过这个答案吗? http://stackoverflow.com/questions/1609586/rails-delayedjob-want-to-load-newest-version-of-job-class – 2009-12-28 20:34:26

回答

2

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