2016-04-14 1 views
0

Я использую ActiveJob в приложении Rails и пытаюсь добавить некоторые общие функции, которые должны использоваться всеми моими заданиями (точнее, обработка исключений).Есть ли эквивалент 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>

Я не вижу ссылки в рельсах документа в этом конкретный образец. Кто-нибудь знает хороший подход для этого?

ответ

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