2011-01-06 112 views
0

我以前使用過Delayed_job。我有一箇舊的項目運行在服務器上,我無法從Ruby 1.8.6升級到1.8.7,因此無法使用延遲作業,所以我試圖BackgroundJobs http://codeforpeople.rubyforge.org/svn/bj/trunk/READMEBackgroundJobs完成後停止作業

我讓它工作以便我的工作能夠順利進行,但有些事情看起來並不正確。例如,如果我像這樣運行工作:

jobs = Bj.submit "echo hi", :is_restartable => false, :limit => 1, :forever => false 

然後我看到bj_job表中的工作,我看到它一起完成在標準輸出「喜」。我也看到表中只有一個工作,它不會重新運行它。

出於某種原因,如果我這樣做:

jobs = Bj.submit "./script/runner ./jobs/calculate_mean_values.rb #{self.id}", :is_restartable => false, :limit => 1, :forever => false 

的工作仍然完成如預期,但是,它保持在bj_job表中插入新行,且該方法獲取運行一遍又一遍,直到我停止我dev服務器。這是它應該如何工作?

我使用的是Ruby 1.8.6和Rails 2.1.2,我沒有升級選項。我正在使用Bj的插件風格。

因爲我只需要運行過程中的模型保存一次後,我把它通過使用腳本/亞軍工作直接像這樣:

system " RAILS_ENV=#{RAILS_ENV} ruby #{RAILS_ROOT}/script/runner 'CompositeGrid.calculate_values(#{self.id})' & " 

但想知道如果我做的事情後臺作業錯誤,

回答

1

好的,這是愚蠢的用戶錯誤。事實證明,我收到了一個回撥,即重新啓動了該進程並創建了一個無限循環。確定回撥後,其工作與預期完全一致。

+1

感謝您花時間發佈您自己的解決方案,以便其他未來也有類似問題的人員可以從中受益! – vonconrad 2011-01-08 00:58:46