2009-12-28 39 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實例。