我正在尝试使用Capistrano将启用了Action Cable的应用程序部署到VPS。我正在使用Puma,Nginx和Redis(用于电缆)。经过几次障碍后,我得以使其在本地开发环境中工作。我正在使用默认的进程内/cable URL。但是,当我尝试将其部署到VPS时,我在JS日志中不断遇到这两个错误:

Establishing connection to host ws://{server-ip}/cable failed.
Connection to host ws://{server-ip}/cable was interrupted while loading the page.

在我的应用程序专用nginx.error.log中,我收到了以下消息:
2016/03/10 16:40:34 [info] 14473#0: *22 client 90.27.197.34 closed keepalive connection

在JS提示中打开ActionCable.startDebugging()不会显示任何有趣的内容。只是ConnectionMonitor尝试无限期地重新打开连接。我也收到301:永久移动-在我的网络监视器中对/cable的请求。

我尝试过的事情:
  • 使用async适配器代替Redis。 (这是在开发环境中使用的)
  • 在我的/etc/nginx/sites-enabled/{app-name}中添加以下内容:
    location /cable/ {
      proxy_pass http://puma;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "Upgrade";
    }
    
  • Rails.application.config.action_cable.allowed_request_origins设置为适当的主机(尝试使用“http://{server-ip}”和“ws://{server-ip}””)
  • 开启Rails.application.config.action_cable.disable_request_forgery_protection

  • 没有运气。是什么原因引起的?
    $ rails -v
    Rails 5.0.0.beta3
    

    请告知我任何可能有用的其他详细信息。

    最佳答案

    终于,我开始工作了!我已经尝试了大约一个星期的各种事情...

    301重定向是由nginx实际试图将浏览器重定向到/cable/而不是/cable引起的。这是因为我在location节中指定了/cable/而不是/cable!我从this answer那里得到了这个主意。

    10-02 11:30