Получение Action Cable для трансляции в Sidekiq Job

Я использую Rails 5 в среде докеров, и я могу заставить Action Cable отлично транслировать на рабочем Sidekiq, используя worker.new.perform.

Но я не могу заставить его транслироваться при использовании worker.perform_async.

Вот мой кабель.yml:

default: &default
 adapter: redis
 url: <%= ENV['REDIS_PROVIDER'] %>

development:
 <<: *default

test:
  <<: *default

production:
  <<: *default

Вот мой рабочий:

class AdminWorker
  include Sidekiq::Worker

  def perform
    ActionCable.server.broadcast 'admin_channel', content: 'hello'
  end
 end

Мой канал администратора:

class AdminChannel < ApplicationCable::Channel
 def subscribed
  stream_from "admin_channel"
 end

 def unsubscribed
  # Any cleanup needed when channel is unsubscribed
 end
end

Как я упоминал ранее, это прекрасно работает при вызове AdminWorker.new.perform. Как только я пытаюсь запустить AdminWorker.perform_async, кабель не будет транслироваться, и ничего полезного в отношении действия кабеля в журналах. Что мне здесь не хватает?


person ChrisPalmer    schedule 21.02.2017    source источник
comment
Я столкнулся с той же проблемой. Вы нашли какое-нибудь решение?   -  person Rails Developer    schedule 12.08.2017


Ответы (3)


У меня такая же проблема. Наткнулся на этот ответ: ActionCable.server.broadcast из консоли - работал для мне. В основном просто изменили cable.yml

development:
  adapter: async

to

development:
  adapter: redis
  url: redis://localhost:6379/1

и я смог транслировать с консоли, моделей, рабочих классов Sidekiq и т. д.

person Navin Gupta    schedule 07.03.2017
comment
Спасибо, это была именно моя проблема, не удалось заставить моих работников транслировать и синхронизировать мои взгляды, и это решило проблему, особенно предоставленную ссылку - person d1jhoni1b; 19.04.2018

Для тех, кто хочет докеризовать rails и sidekiq, вы должны запустить сервер action_cable отдельно, например

puma -p 28080 cable/config.ru

https://nickjanetakis.com/blog/dockerize-a-rails-5-postgres-redis-sidekiq-action-cable-app-with-docker-compose

https://github.com/kchrismucheke/dockersample/blob/da5923899fb17682fabed041bef5381ed3fd91ab/config/application.rb#L57-L62

person srghma    schedule 15.05.2019

В среде разработки По умолчанию ActionCable будет работать только на сервере rails. И это не будет работать в Sidekiq, консоли, заданиях cron и т. д. Потому что в config/cable.yml для адаптера сервера разработки задан асинхронный режим.

Решение. Для межпроцессного вещания ActionCable необходимо настроить адаптер на Redis.

В config/cable.yml

development:
 adapter: redis
 url: redis://localhost:6379/1
 channel_prefix: project_name_development
person Taimoor Changaiz    schedule 08.12.2020