2016-04-14 27 views
0

我在我的Rails應用程序中使用ActiveJob,並試圖添加一些應該由我的所有作業(確切地說是異常處理)共享的通用功能。是否有等效的ApplicationController,但是對於活動作業?

一個實例是 -

class MyAbstractJob < ActiveJob::Base 
    rescue_from StandardError do |exception| 
    # do exception handling stuff ... 
    end 
end 

class FooJob < MyAbstractJob 
    queue_as :my_queue 

    def perform *args 
    # do job stuff ... 
    end  
end 

該圖案是類似於使用ApplicationController爲控制器,它從ActionController::Base繼承,並提供某處實現上的任何控制器子類可用的共享設施。

這實際上似乎大部分工作,除了當我嘗試調用queue_as :my_queue - 在這種情況下,我最終看到的 -

NoMethodError: undefined method 'queue_as' for #<Class:0x007f088905c970>

我沒有看到在Rails的文檔此引用特定模式。有沒有人知道這個好方法?

回答

0

這很奇怪,我認爲你的代碼是正確的。我已經測試你的代碼原樣,沒有任何改變,並沒有看到任何問題:

FooJob.perform_later 
# Performing FooJob from Inline(my_queue) 
# Performed FooJob from Inline(my_queue) in 3.81ms 
# Enqueued FooJob (Job ID: 6fd5ea5c-06bb-46d8-943c-8cc6f1e6ac33) to Inline(my_queue) 
# => #<FooJob:0x0000000464de90 @arguments=[], @job_id="6fd5ea5c-06bb-46d8-943c-8cc6f1e6ac33", @queue_name="my_queue"> 

我已經把兩個班到app/jobs目錄。

您在問題中顯示的錯誤似乎與繼承有關。你確定你的FooJob類真的繼承了MyAbstractJob嗎?也許你可能還需要重新加載Rails才能確定。

如果問題仍然存在,請發佈實際類代碼,而不是簡單示例。

+0

謝謝!這是真的,它實際上工作正常。該錯誤是其他地方。 – metahamza

相關問題