本地环境下如何阻止Rails应用2连接ActionCable WebSocket频道
问题描述
我正在开发两个Rails 7应用。在应用1中创建了ProductsChannel频道用于广播变更,关闭应用1服务器后,启动多日未开发的应用2,发现它反复尝试连接应用1的ProductsChannel,因找不到该频道持续报错,日志如下:
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" ...
我从未给应用2添加过任何频道,已确认应用1服务器未运行,也重启过应用2,但问题依旧。不想每次切换应用都重启电脑,请问如何让应用2停止尝试使用WebSocket?
解决方法
- 清理浏览器缓存与本地存储:浏览器可能缓存了应用1的ActionCable订阅配置,直接清除应用2对应域名的缓存和本地存储,或用无痕模式打开应用2测试。
- 检查应用2前端代码:搜索
app/javascript目录下是否存在订阅ProductsChannel的代码片段(比如App.cable.subscriptions.create相关逻辑),如果有直接删除。 - 临时禁用ActionCable:如果应用2暂时不需要WebSocket功能,修改
config/cable.yml,将开发环境的适配器设为none:development: adapter: none - 重启浏览器:浏览器可能残留了WebSocket连接会话,重启浏览器可清除这些残留进程,比重启电脑更高效。
内容的提问来源于stack exchange,提问作者abarron
相关产品推荐
相关产品推荐

