gpt4 book ai didi

ruby-on-rails - 来自 sidekiq 的 Action Cable Broadcast 消息仅在刷新后显示,从控制台立即生效

转载 作者:行者123 更新时间:2023-12-01 05:49:29 25 4
gpt4 key购买 nike

我关注了 this tutorial创建一个 Action 有线广播,但它并不像预期的那样工作。 channel 流和网络应用程序订阅成功,但 sidekiq后台作业广播的消息只有在刷新页面后才会显示 .在控制台上使用相同的命令会立即更新页面。

在 chrome 的开发者模式下查看帧时,我看不到来自后台作业的广播消息,但可以立即看到控制台发送的消息。但是,我可以确认 sidekiq 后台作业正在某处广播这些消息,因为它们确实会在刷新时显示出来;但是,我不知道他们在哪里排队。

是否需要进行任何其他配置更改来防止来自后台作业的消息在某处排队?我的代码中是否有任何拼写错误或错误可能导致这种情况?

Action 电缆广播消息:

ActionCable.server.broadcast "worker_channel", {html:
"<div class='alert alert-success alert-block text-center'>
Market data retrieval complete.
</div>"
}

smart_worker.rb: -​​- 这在 Controller 的 Action 中被称为 perform_async
class SmartWorker
include Sidekiq::Worker
include ApplicationHelper
sidekiq_options retry: false

def perform
ActionCable.server.broadcast "worker_channel", {html:
"<div class='alert alert-success alert-block text-center'>
Market data retrieval complete.
</div>"
}
end

连接.rb:
module ApplicationCable
class Connection < ActionCable::Connection::Base
identified_by :current_user

def connect
self.current_user = current_user #find_verified_user ignored until method implemented correctly and does not always return unauthorized
end

private

def find_verified_user
if current_user = User.find_by(id: cookies.signed[:user_id])
current_user
else
reject_unauthorized_connection
end
end
end
end

worker_channel:
class WorkerChannel < ApplicationCable::Channel
def subscribed
stream_from "worker_channel"
end

def unsubscribed
end
end

worker .js:
App.notifications = App.cable.subscriptions.create('WorkerChannel', {
connected: function() {
console.log('message connected');
},
disconnected: function() {},
received: function(data) {
console.log('message recieved');
$('#notifications').html(data.html);
}
});

电缆.yml
development:
adapter: redis
url: redis://localhost:6379/1

test:
adapter: async

production:
adapter: redis
url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %>
channel_prefix: smarthost_production

还添加了

的观点,但这并没有什么不同。

最佳答案

ActionChannel 通常不会对消息进行排队,并且在没有订阅者时广播的消息应该会丢失。如果通知实际上比您预期的要晚,则可能会发生观察到的行为。

我会检查:

  • 在控制台中运行整个作业,而不仅仅是通知,看看它是否运行缓慢
  • 检查 sidekiq 队列延迟
  • 在作业中添加通知之前/之后的日志记录,如果作业实际运行成功,则检查日志
  • 关于ruby-on-rails - 来自 sidekiq 的 Action Cable Broadcast 消息仅在刷新后显示,从控制台立即生效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56466738/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com