我使用 crono 定时执行 job 任务,job 任务就是更新 camera 某个值
class ScanerJob < ApplicationJob
queue_as :default
def perform()
Camera.first.update_attributes(:name=>Time.now.to_i)
end
end
camera 这个类有回调,向所有的连接发送更新通知
class Camera < ApplicationRecord
after_save :update_notify
def update_notify
puts "notify"
ActionCable.server.broadcast "conversation_channel", cmd: "refresh_camera"
end
end
我执行 crono 之后浏览器都无法收到消息,我换了另一种方式浏览器就能收到消息了,在 controller 里面定义一个 action,然后请求这个 url 执行 Camera 类更新
def publish
Camera.first.update_attributes(:name=>Time.now.to_i)
end
然后我又换了在 console.log 里面执行,也是没法发送消息,效果跟在 job 中执行一样。
$ rails c
Running via Spring preloader in process 5110
Loading development environment (Rails 5.1.7)
2.4.0 :001 > Camera.first.update_attributes(:name=>Time.now.to_i)
(0.3ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
Camera Load (0.2ms) SELECT `cameras`.* FROM `cameras` ORDER BY `cameras`.`id` ASC LIMIT 1
(0.2ms) BEGIN
SQL (0.3ms) UPDATE `cameras` SET `name` = '1590657294', `updated_at` = '2020-05-28 09:14:54' WHERE `cameras`.`id` = 1
notify
[ActionCable] Broadcasting to conversation_channel: {:cmd=>"refresh_camera"}
(2.5ms) COMMIT
=> true
这也是醉了,感觉没有载入 actioncable 这个环境,请求 url 这种方式就载入了 actioncable 的环境,各位大神请指教,这是什么 bug,如何解决