Rails 4 ActiveJobs, использующие другой адаптер enqueue и имеющие NoMethodError
Я пытаюсь запустить задание ActiveJob из метода контроллера, но это не удается, и я не могу определить правильное место проблемы:
# приложение / контроллеры / users_controller.rb
1 class UsersController < ApplicationController
2 def new
3 @user = User.new
4 end1
5
6 def create
7 @user = User.create(user_params)
8 PoliciesChecksJob.new(@user.id).enqueue
9 # redirect to somewhere
10 end1
11 end
# приложение / работа /policies_checks_job.rb
class PoliciesChecksJob < ActiveJob::Base
queue_as :default
def perform(user_id)
SearchPoliciesCommands.new.execute(user_id)
end
end
Сводка журналов:
Started POST "/users" for ::1 at 2015-03-30 15:01:03 +0100
Processing by UsersController#create as HTML
...(params)
(0.1ms) BEGIN
... (inserts the user)
(0.3ms) COMMIT
[ActiveJob] Enqueued PoliciesChecksJob (Job ID: da...e2) to Sneakers(default) with arguments: 1
Completed 500 Internal Server Error in 76ms
NoMethodError (private method `warn' called for nil:NilClass):
app/controllers/users_controller.rb:8:in `create'
Буду признателен за любую мысль.
1 ответ
По сути, с адаптером enqueue была небольшая проблема: я предпочитаю использовать кроссовки из-за того, что он отлично работает с RabbitMQ.
- Поэтому мне пришлось указать, что я хочу использовать другой адаптер очереди, чем по умолчанию:
# конфиг /application.rb
config.active_job.queue_adapter = :sneakers
Установите RabbitMQ и запустите его:
(предпочтительно в другой вкладке терминала)
$ rabbitmq-сервер
Установите кроссовки с драгоценными камнями и запустите их (предпочтительнее на вкладке других терминалов):
$ sneakers work ActiveJob:: QueueAdapters:: SneakersAdapter:: JobWrapper --require app / jobs /icies_checks_job.rb