如何在本地环境中禁用其他 Rails 应用程序的 Rails ActionCable WebSocket 通道

问题描述 投票:0回答:2

我正在开发两个不同的 Rails 应用程序。在应用程序 1 上,我创建了一个名为“ProductsChannel”的频道来广播更改。后来我关闭了 App 1 的服务器,并启动了 App 2 的服务器,我已经好几天没有使用它了。但现在它正在尝试从应用程序 1 连接到我的“ProductsChannel”。它找不到它,所以它反复告诉我它找不到该频道。日志如下。

如何阻止 App 2 尝试使用 WebSockets?我从未向 App 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 的服务器未运行。我尝试过关闭 App 2 并重新启动。

我怀疑重新启动笔记本电脑可能会解决这个问题,但我不应该每次切换应用程序时都重新启动整个计算机。

ruby-on-rails websocket actioncable ruby-on-rails-7
2个回答
0
投票

感谢评论中的 mechnikov 指出了我的菜鸟错误。我使用 App 1 打开了一个浏览器选项卡。关闭此选项卡解决了问题。


0
投票

由于启用的应用程序的日志包含对 websockets 端点的请求,甚至包含无法找到禁用的应用程序通道的记录 - 这意味着某些客户端仍然连接到您的服务器并发送这些请求

在这方面,第一个想法是打开浏览器选项卡,订阅与当前后端相同端口上的 websocket 通道

要排除此行为,您可以关闭此类选项卡或为不同的应用程序使用不同的端口

© www.soinside.com 2019 - 2024. All rights reserved.