Не запускать очередь по wisper-sidekiq
Я пытаюсь сделать небольшой пример с драгоценным камнем wisper-sidekiq. Очередь создана, но не запускается. Зачем? Я опишу шаги, которые вы делаете, я думаю, это будет проще. Я надеюсь на вашу помощь.
А. контроллер:
class BooksController < ApplicationController
def create
service = CreateBook.new
service.subscribe(ActivityListener, async: true)
service.on(:reserver_item_successfull) { |book| redirect_to book_path(book.id) }
service.on(:reserver_item_failed) { |book| @book = Book.new(book_params); respond_with(@book) }
service.execute(current_user, book_params)
end
Б. служба:
require 'wisper/sidekiq'
require 'sidekiq/api'
class CreateBook
include Wisper::Publisher
def execute(performer, attributes)
book = Book.new(attributes)
if book.valid?
book.save
broadcast(:reserver_item_successfull, performer, book)
else
broadcast(:book_failed, performer, book)
end
end
end
C. слушатель:
class ActivityListener
def self.reserver_item_successfull(performer, book)
puts performer.name.to_s + ", book: " + book.title.to_s
end
end
Когда я сохраняю книгу, то, конечно, создаю очередь. Но:
- sidekiq молчит (логи пусты, но очередь создана)
- Redis тоже молчит
Может быть, я неправильно запускаю redis (redis-server) или sidekiq (bundle exec sidekiq)? Пожалуйста, помогите мне.
PS Попробуйте связать exec sidekiq -d -e production sidekiq -q по умолчанию -C config / sidekiq.yml, но не результат. Sidekiq.rb пусто.
2 ответа
Проблема решена. Я должен был запустить Sidekiq:
пакет exec sidekiq-r ./server.rb-L log/sidekiq.log также в server.rb
требовать 'sidekiq'
Sidekiq.configure_server do | config | config.redis = {url: 'redis: // localhost: 6379/0'} end
Sidekiq.configure_client do | config | config.redis = {url: 'redis: // localhost: 6379/0'} end
Я думаю, что вы можете исправить это с помощью следующих шагов:
require 'sidekiq/web'
а потом,mount Sidekiq::Web => '/sidekiq'
- идти к
/sidekiq
чтобы увидеть, есть ли рабочие / задачи / очереди - если нет
- что-то может быть не так с вашим Redis
- или твой код, поставь
binding.pry
там
- если есть, должно быть что-то не так с вашим кодом, вставьте
binding.pry
там
Надеюсь, это поможет:-)