提问人:abron 提问时间:9/21/2023 更新时间:9/22/2023 访问量:69
如何在本地环境中为其他 Rails 应用程序禁用 Rails ActionCable WebSocket 通道
How to disable Rails ActionCable WebSocket channel for other Rails app in local env
问:
我正在开发两个不同的 Rails 应用程序。在应用 1 上,我创建了一个名为“ProductsChannel”的频道来广播更改。后来,我关闭了应用程序 1 的服务器,并启动了应用程序 2 的服务器,我已经几天没有工作了。但现在它正在尝试从应用程序 1 连接到我的“ProductsChannel”。它找不到它,所以它反复告诉我它找不到频道。日志如下。
如何阻止应用程序 2 尝试使用 WebSockets?我从未向应用程序 2 添加任何频道,所以不确定它是如何被拉入其中的。
Started GET "/cable" for ::1 at 2023-09-21 14:57:20 +0200
ActiveRecord::SchemaMigration Pluck (0.2ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
Started GET "/cable" [WebSocket] for ::1 at 2023-09-21 14:57:20 +0200
Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
Started GET "/cable" for ::1 at 2023-09-21 14:57:20 +0200
Started GET "/cable" [WebSocket] for ::1 at 2023-09-21 14:57:20 +0200
Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
Started GET "/cable" for ::1 at 2023-09-21 14:57:20 +0200
Started GET "/cable" [WebSocket] for ::1 at 2023-09-21 14:57:20 +0200
Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
Subscription class not found: "ProductsChannel"
Subscription class not found: "ProductsChannel"
Subscription class not found: "ProductsChannel"
...
这两个应用程序都在 Rails 7 上。
我已确保应用程序 1 的服务器未运行。我尝试关闭应用程序 2 并重新启动。
我怀疑重新启动笔记本电脑可能会解决它,但我不应该在每次切换应用程序时重新启动整个机器。
答:
0赞
abron
9/21/2023
#1
感谢评论中的mechnikov指出了我的菜鸟错误。我打开了一个浏览器选项卡,其中包含应用程序 1。关闭此选项卡解决了该问题。
评论
2赞
mechnicov
9/22/2023
#2
由于已启用应用程序的日志包含对 websockets 端点的请求,甚至包含无法找到已禁用应用程序通道的记录,这意味着某些客户端仍然连接到您的服务器并发送这些请求
在这方面,首先想到的是一个打开的浏览器选项卡,该选项卡订阅了与当前后端相同的端口上的 websocket 通道
若要排除此行为,可以关闭此类选项卡或对不同的应用程序使用不同的端口
评论