让 Action Cable 在 Sidekiq Job 中广播
Getting Action Cable to broadcast in Sidekiq Job
我在 docker 环境中使用 Rails 5,我可以使用 worker.new.perform 让 Action Cable 在 Sidekiq worker 上进行广播,效果非常好。
但是对于我来说,我无法在使用 worker.perform_async 时播放它。
这是我的 cable.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,电缆将不会广播,日志中的操作电缆也没有任何帮助。我在这里错过了什么?
我遇到了同样的问题。遇到这个答案: - 为我工作。基本上只是改了cable.yml
development:
adapter: async
到
development:
adapter: redis
url: redis://localhost:6379/1
并且我能够从控制台、模型、Sidekiq worker 类 等进行广播
对于那些想要 dockerize rails 和 sidekiq 的人,你应该 运行 action_cable 像
这样的单独服务器
puma -p 28080 cable/config.ru
在开发环境中
默认情况下,ActionCable 仅在 rails 服务器上 运行。它不会在 Sidekiq、控制台、cron 作业等中工作。
因为在config/cable.yml开发服务器适配器设置为async
解法:
对于 ActionCable 进程间广播,您必须将适配器设置为 Redis
在config/cable.yml
development:
adapter: redis
url: redis://localhost:6379/1
channel_prefix: project_name_development
我在 docker 环境中使用 Rails 5,我可以使用 worker.new.perform 让 Action Cable 在 Sidekiq worker 上进行广播,效果非常好。
但是对于我来说,我无法在使用 worker.perform_async 时播放它。
这是我的 cable.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,电缆将不会广播,日志中的操作电缆也没有任何帮助。我在这里错过了什么?
我遇到了同样的问题。遇到这个答案:
development:
adapter: async
到
development:
adapter: redis
url: redis://localhost:6379/1
并且我能够从控制台、模型、Sidekiq worker 类 等进行广播
对于那些想要 dockerize rails 和 sidekiq 的人,你应该 运行 action_cable 像
这样的单独服务器puma -p 28080 cable/config.ru
在开发环境中 默认情况下,ActionCable 仅在 rails 服务器上 运行。它不会在 Sidekiq、控制台、cron 作业等中工作。 因为在config/cable.yml开发服务器适配器设置为async
解法: 对于 ActionCable 进程间广播,您必须将适配器设置为 Redis
在config/cable.yml
development:
adapter: redis
url: redis://localhost:6379/1
channel_prefix: project_name_development