问题标签 [actioncable]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - Actioncable 进程的自定义日志记录详细程度
我有以下Procfile:
action_cable
进程和 rails 进程都使用通过 .bashrc 变量导出的$ web
RAILS_ENV 变量,设置哪个环境 rails 引导。action_cable
因此,运行 foreman start 会同时为和加载测试环境web
。但是,我希望 actioncable 使用:info
Log Level,并且我希望 web rails 进程使用fatal
.
有没有办法可以启动两个进程并使用 ENV 或进程信息来动态设置日志级别?
类似的东西(伪代码):
ruby-on-rails - Rails 5 ActionCable WebSockets 未返回状态为 101 升级响应的升级标头
编辑:显示在最后,发现实际上创建了升级标头。
我正在使用action-cable-example代码库,尝试构建一个 WebSocket 应用程序。依赖于应用程序中提供的浏览器客户端的“Chatty”应用程序运行良好。但是,我不会使用该客户端,因为我需要外部 IoT 连接。因此,我正在尝试将 ws/wss WebSocket 协议实现到外部非浏览器设备,并且我在 route.rb 中的连接是:
我已经尝试了几个外部客户端,例如 Chrome Simple WebSocket Client 扩展和 gem websocket-client-simple使用 sample/client.rb。在这两种情况下,ActionCable 都不返回升级标头。Chrome 扩展程序抱怨如下:
实际的握手表明这是真的,如:
根据标准,响应标头应为:
Sec-WebSocket-Accept 尤其重要,因为它是基于请求标头的 Sec-WebSocket-Key 的计算,以确认 ws/wss 被理解并且应该发生交换协议。
在所有这些过程中,服务器会更开心,直到客户端被勾选并关闭连接:
查看 websocket-client-simple,我分解了返回到 client.rb 的 WebSocket,它还显示了空头。我正在显示代码,然后是 WebSocket:
在此响应中,我注意到实例变量“@handshaked”返回为 false。这可能是相关的,但到目前为止我还没有找到在代码中设置或引用的位置。
更新:发现 WebSocket::Driver.start 实际上创建了升级标头。而且,@socket.write(response)应该通过 EventMachine 将它们发送出去。代码:
握手响应是:
ruby-on-rails - ActionCable vs Socket.Io 是最可靠和最可扩展的?
哪一个是最可靠和最可扩展的?ActionCable 还是 Socket.io?
为了避免基于意见的答案,请提供一些证明假设的真实测量数据。
由于 ActionCable 已经推出一年,生产中是否有任何应用程序是使用 ActionCable 实现的?
谢谢
ruby-on-rails-5 - 使用 ActionCable 刷新页面?
我在 rails 4 中构建了一个支持仪表板,以帮助支持团队监控客户交付文件的运行状况和时间。
我想将此应用程序转换到 Rails 5 并利用 ActionCable 使应用程序实时运行。
我能找到的每一个 ActionCable 示例都只是一些聊天应用程序或使用设计的超级特定实现,我找不到任何通用教程示例来展示如何在新数据可用时“强制”刷新页面。因此,当文件被扫描并且数据进入刷新页面或更高级的设置时,将部分(即表格行)附加到表格的顶部。
所以我在这里得到的是,有没有人知道 ActionCable 的一般教程,它只是使用 ActiveRecord 作为触发器刷新页面,或者这样的事情是否可能呢?
ruby-on-rails - 似乎 sidekiq 不支持 Rails5 中的 actioncable?
所以我试图在其中一个工作中广播一条消息。该作业正在执行,但它没有广播消息。是不是因为 actioncable 需要 Puma 进行消息广播?
ruby-on-rails - Rails 5.0.0 Actioncable 通过代理
我有一个使用 Puma 和 Nginx 1.10 部署到 vps 的聊天应用程序,我的 nginx 配置如下:
这是我的电缆 config.ru 文件:
在环境/生产.rb
我的客户端通过代理服务器连接到 Internet,在 chrome 控制台中出现以下错误:
WebSocket 连接到“ws://ahu.mydomain.ir/cable”失败:通过代理服务器建立隧道失败
在另一个没有代理的客户端中,一切正常。
ruby-on-rails - 动作线无法连接(升级到 WebSocket 失败)
我在使用这些日志消息连接到非开发环境中的 websocket 时遇到问题
我调试了一下,发现浏览器/javascript发送的请求与unicorn(使用nginx运行)收到的请求不完全相同。
浏览器的请求头是
这里的连接是“升级”,但 websocket 请求的连接是“关闭”的(可能是 nginx 搞砸了?)
而websocket驱动程序中的这段代码失败了
更新
这是我的 nginx 配置
我已经在 /cable 上安装了 actioncable 服务器
通过 nginx 更改,我能够成功握手,但服务器无法发送心跳并且连接不断下降。
nginx - 无法连接到 Elastic Beanstalk 上的 ActionCable
我正在尝试在运行 Nginx 和 Puma 的 Elastic Beanstalk 上部署带有 ActionCable 的 Rails 5.0 应用程序。
在.ebextensions/nginx.config
我有以下内容:
location /cable {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade websocket;
proxy_set_header Connection upgrade;
}
并且在config/environments/production.rb
config.action_cable.allowed_request_origins = [ 'http://####.####.com', /http:\/\/####.*/ ]
将应用程序部署到 Elastic Beanstalk 环境后,我在 Chrome 控制台中出现此错误:
与“ws://####.####.com/cable”的 WebSocket 连接失败:在建立连接之前 WebSocket 已关闭。
我已尝试遵循此线程中的建议,但最终却收到此错误:
WebSocket 连接到“ws://####.####.com/cable”失败:WebSocket 握手期间出错:意外响应代码:404
这是我的.ebextensions/nginx.config
文件目前的样子。
任何帮助将不胜感激。
callback - Rails Actioncable 成功回调
我使用 perform javascript 调用在服务器上执行操作,如下所示:
但是,据我所见,似乎没有内置的javascript“成功”回调,即让我知道该操作在服务器端结束(或可能失败)。我正在考虑在动作结束时发送广播,如下所示:
但所有订阅此“房间”的客户都会收到该消息,可能会导致误报。此外,据我所知,消息顺序不能保证,因此此操作中的先前广播可能会在成功消息之后传递,可能会导致进一步的问题。
对此有任何想法还是我完全错过了什么?
ruby-on-rails - WebSocket 连接到“ws://example.com/cable”失败:意外响应代码:404
我在 Rails 5.0.0 上创建了一个项目。
此外,我在此视频中所做的完全一样:https ://www.youtube.com/watch?v=n0WUjGkDFS0
生成的频道除外。我生成了两个频道:聊天和评论。
我也并行阅读:https ://github.com/rails/rails/tree/master/actioncable
在 routes.rb 我添加了这一行:
mount ActionCable.server => '/cable'
在 application.rb 我添加了这一行:
config.action_cable.mount_path = '/cable'
结果,我运行了这个命令的一个项目:
rails server -b SERVER_IP -p 3020
此错误显示在控制台浏览器中:
WebSocket 连接到“ws://site.com/cable”失败:意外响应代码:404
运行项目的一段日志:
错误可能是什么?我究竟做错了什么?
定义:
SERVER_IP - 这伪装了服务器的原始 IP 地址。
example.com
- 这伪装了网站的原始 URL。