gpt4 book ai didi

ruby-on-rails - Rails - 操作电缆上的服务器阻塞

转载 作者:行者123 更新时间:2023-12-04 05:49:14 24 4
gpt4 key购买 nike

我有一个在开发中完美运行的 Rails 应用程序。我已部署到服务器,应用程序加载并正确显示其登录页面和关于页面。但是,当我使用 Action Cable 转到页面时,服务器会阻止。从网页发出的最后一个请求与 Action Cable 相关,以及进一步的页面操作(表单提交,甚至重新加载)并且没有响应。

我已将它与服务器隔离,因为尝试从另一个浏览器加载站点的主页不起作用。关闭第一次向 Action Cable 发出请求的选项卡会立即加载另一个页面(并且突然处理来自第一页的所有待处理请求)。

我在 production.log 中没有看到任何错误,但这是导致挂起的部分:

I, [2018-01-24T21:12:38.601260 #9840]  INFO -- : [86b3fcc1-cebd-4d70-99ff-b6f9f147bc00]   Rendered collection of skill_checks/_skill_check.html.erb [5 times] (16.7ms)
I, [2018-01-24T21:12:38.601352 #9840] INFO -- : [86b3fcc1-cebd-4d70-99ff-b6f9f147bc00] Rendered rooms/show.html.erb within layouts/application (26.6ms)
I, [2018-01-24T21:12:38.602314 #9840] INFO -- : [86b3fcc1-cebd-4d70-99ff-b6f9f147bc00] Completed 200 OK in 32ms (Views: 26.7ms | ActiveRecord: 1.8ms)
I, [2018-01-24T21:12:38.740061 #9840] INFO -- : [5a06a7d8-a4a5-4ab4-8287-377dfa3447fe] Started GET "/cable" for 65.99.102.74 at 2018-01-24 21:12:38 +0000
I, [2018-01-24T21:12:38.740860 #9840] INFO -- : [5a06a7d8-a4a5-4ab4-8287-377dfa3447fe] Started GET "/cable/" [WebSocket] for 65.99.102.74 at 2018-01-24 21:12:38 +0000
I, [2018-01-24T21:12:38.740970 #9840] INFO -- : [5a06a7d8-a4a5-4ab4-8287-377dfa3447fe] Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: upgrade, HTTP_UPGRADE: websocket)
I, [2018-01-24T21:12:38.794498 #9840] INFO -- : RoomsChannel is transmitting the subscription confirmation
I, [2018-01-24T21:12:38.795245 #9840] INFO -- : RoomsChannel is streaming from room_helloworld

一旦我关闭有问题的选项卡,加载将继续(在这种情况下,是在页面重新加载时触发的 javascript 请求),如下所示:
I, [2018-01-24T21:15:55.109087 #9840]  INFO -- : Finished "/cable/" [WebSocket] for 65.99.102.74 at 2018-01-24 21:15:55 +0000
I, [2018-01-24T21:15:55.109342 #9840] INFO -- : RoomsChannel stopped streaming from room_helloworld
I, [2018-01-24T21:15:55.110922 #9840] INFO -- : [2cf5cc53-2f44-42a9-be30-496bb80646a0] Started GET "/rooms/helloworld?update=true" for 65.99.102.74 at 2018-01-24 21:15:55 +0000
I, [2018-01-24T21:15:55.112841 #9840] INFO -- : [2cf5cc53-2f44-42a9-be30-496bb80646a0] Processing by RoomsController#show as HTML

我已经截断了其余部分;那里没有失败或其他任何有趣的事情。

我确实在同一台服务器上运行了一个 redis 服务器,并将其端口信息放入了 production: 部分下的 config/cable.yml 中。

我相信 Rails 可以看到它,因为我没有看到任何错误。此外,为了验证这一点,我通过 redis-cli 连接到 redis 并订阅了一个 channel ,然后通过 Rails 控制台向该 channel 发送了一条广播消息并验证了收据。

更新:我尝试了一些不同的构建来隔离问题。以下是我现在所知道的:
  • 我删除了对 ActionCable.server.broadcast 的唯一调用,因此这不是块的来源。
  • 我将 javascript 控制台日志添加到连接、断开连接和接收。客户端确实订阅成功。
  • 我尝试了从客户端删除 App.cable.subscriptions.create 的构建。虽然在这种情况下没有 websocket 连接(如您所料),但服务器不会阻塞/挂起。

  • 鉴于上述情况,我确定这与 ActionCable 有关,但我不确定它是否与我的 redis 配置有关。

    最佳答案

    如果您没有在 nginx conf 文件中(在服务器部分内)设置以下几行,结果就是您得到的行为:

    location /cable {
    passenger_app_group_name your_app_websocket;
    passenger_force_max_concurrent_requests_per_process 0;
    }

    其中,如果您的应用名称为“chat”,则第一行将显示为:
    passenger_app_group_name chat_action_cable
    坦率地说,我不确定在哪里定义,但它可能是 Rails 魔法的一部分。

    关于ruby-on-rails - Rails - 操作电缆上的服务器阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48432062/

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