2014-09-11 103 views
3

作業隊列在daemonized時未添加到delayed_jobs表中。但是,當它不被守護進程時,這是有效的。Ruby on Rails - 延遲作業 - 作業隊列未添加到數據庫中

我有三個rake任務(a.rake,b.rake,c.rake)。

在a.rake

task :run_a => :environment do 
    A.new.get_a_data 
end 

class A 
def get_a_data 
    ... 
    schedule_next_a_job 
end 

def schedule_next_a_job 
    get_a_data 
end 

handle_asynchronously :get_a_data, :run_at => Proc.new { 2.minutes.from_now }, :queue => 'a' 
end 

在b.rake

task :run_b => :environment do 
    B.new.get_b_data 
end 

class B 
def get_b_data 
    ... 
    schedule_next_b_job 
end 

def schedule_next_b_job 
    get_b_data 
end 

handle_asynchronously :get_b_data, :run_at => Proc.new { 5.minutes.from_now }, :queue => 'b' 
end 

在c.rake

namespace :run do 
    task :start do 
    `rake run_a` 
    `rake run_b` 
    if Rails.env == 'development' 
    `QUEUES=a,b rake jobs:work` 
    else 
    `RAILS_ENV=production bin/delayed_job --queues=a,b start` 
    end 

    task :stop do 
    `rake jobs:clear` 
    end 
end 

在控制檯,我運行象下面這樣:

RAILS_ENV=production rake run:start # to start jobs worker 
rake run:stop # to clear my jobs worker 

在我的延遲工作表last_error被顯示爲:

作業未能負荷:未定義類/模塊A

工作未能加載:undefined class/module B

任何人都可以幫助我擺脫這個問題?

在此先感謝。

+1

有你看看這個[解決方案](http://stackoverflow.com/questions/12518529/model-classes-not-loading-in-delayed-job-when-using-threadsafe#answer-12570405 )?? – 2014-09-11 07:00:21

+1

@Gagan是的。需要'my_custom_class'的作品!謝謝 – 2014-09-11 07:36:02

回答

2

反序列化錯誤的一個常見原因是YAML引用了worker不知道的類。如果是這樣的話,你可以添加

# file: config/initializers/custom.rb 
    require 'my_custom_class' 

這將迫使my_custom_class工人啓動時加載。 Reference