2015-03-22 2 views
3

Я сконфигурировал Delayed::Paperclip для обработки вложений скрепки в фоновом режиме. Я установил и настроил Resque и в соответствии с README, Resque теперь должен выполнять фоновые задачи:delayed_paperclip использует ActiveJob вместо Resque

Убедитесь, что у вас есть Resque и работает. Работы будут отправлены в: paperclip queue, так что вы можете правильно отправить своего рабочего . Настройте resque и ваши рабочие точно так же, как и в случае .

Однако, Active Job, другая структура для выполнения фоновых задач, устанавливается как зависимость для Rails 4.1/ActionMailer, и она «крадет» задачу из Resque.

[ActiveJob] Enqueued DelayedPaperclip::Jobs::ActiveJob (Job ID: ba60f576-e544-4f53-8db2-eb0085f1f653) to Inline(paperclip) with arguments: "Photo", 79, "picture" 

Проблема заключается в том, что активное задание, кажется, сразу работает в том же потоке, - в основном это не работает в фоновом режиме на всех.

Я проверил код отложенной :: Скрепки и, кажется, есть приоритет установленных движков:

def detect_background_task 
    return DelayedPaperclip::Jobs::ActiveJob if defined? ::ActiveJob::Base 
    return DelayedPaperclip::Jobs::DelayedJob if defined? ::Delayed::Job 
    return DelayedPaperclip::Jobs::Resque  if defined? ::Resque 
    return DelayedPaperclip::Jobs::Sidekiq if defined? ::Sidekiq 
end 

Когда я включил их вокруг и положил Resque сверху, она работает. Приоритет кажется жестким, но я полагаю, что я не могу быть единственным с этой проблемой, если это так. Это ошибка, или я чего-то не хватает?

+0

Есть ли какие-либо новости о том, что вызывало ActiveJob для немедленного запуска? –

+0

@NoahPassalacqua Да, это (или было?) Поведение по умолчанию. Попробуйте изменить queue_adapter (см. Ответ ниже) –

ответ

3

Active Job на самом деле очень хороший первичный выбор, так как он действует как уровень абстракции:

Активной Работой является основой для объявления новых рабочих мест и делаете их работать на различные очереди бэкэндов. [...] Главное, чтобы все приложения Rails имели инфраструктуру работы на месте, даже если она находится в форме «немедленного бегуна».

По умолчанию необходимо выполнить задачи немедленно, но также можно выбрать другие серверы. Одним из этих компонентов является Resque. Так что вам нужно всего лишь настроить Active Job для использования Resque: Delayed :: Paperclip → Active Job → Resque. Просто поместите это в application.rb:

module MyApp 
    class Application < Rails::Application 
    ... 
    config.active_job.queue_adapter = :resque 
    end 
end 

запаздывающего :: Paperclip README, вероятно, следует обновить.

Смежные вопросы