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.

  1. Поэтому мне пришлось указать, что я хочу использовать другой адаптер очереди, чем по умолчанию:

# конфиг /application.rb

config.active_job.queue_adapter = :sneakers 
  1. Установите RabbitMQ и запустите его:

    (предпочтительно в другой вкладке терминала)

    $ rabbitmq-сервер

  2. Установите кроссовки с драгоценными камнями и запустите их (предпочтительнее на вкладке других терминалов):

$ sneakers work ActiveJob:: QueueAdapters:: SneakersAdapter:: JobWrapper --require app / jobs /icies_checks_job.rb

Другие вопросы по тегам