Ruby on rails Rails5行动电缆Nginx 404和502错误
每个人:)。 我知道人们已经面临很多与我有关的问题。我已经试过了,但我的问题还没有解决。我从过去三天一直在努力解决这个问题,但我无法做到这一点 我第一次使用ActionCable,在开发服务器上它运行良好。但在我使用Puma和Nginx的生产中,我面临着可怕的问题 最初,当我在nginx配置中没有(位置/电缆)设置时,服务器给了我404握手错误Ruby on rails Rails5行动电缆Nginx 404和502错误,ruby-on-rails,nginx,ruby-on-rails-5,puma,actioncable,Ruby On Rails,Nginx,Ruby On Rails 5,Puma,Actioncable,每个人:)。 我知道人们已经面临很多与我有关的问题。我已经试过了,但我的问题还没有解决。我从过去三天一直在努力解决这个问题,但我无法做到这一点 我第一次使用ActionCable,在开发服务器上它运行良好。但在我使用Puma和Nginx的生产中,我面临着可怕的问题 最初,当我在nginx配置中没有(位置/电缆)设置时,服务器给了我404握手错误 i、 WebSocket握手期间出错:意外响应代码:404 然后在nginx配置中添加以下位置/电缆配置后,我开始收到502坏网关错误 注意:我没有专门
i、 WebSocket握手期间出错:意外响应代码:404 然后在nginx配置中添加以下位置/电缆配置后,我开始收到502坏网关错误 注意:我没有专门为ActionCable打开任何端口。我想这不是必须的。我的服务器上只有端口80打开。 我需要一些专家来帮我。我需要快速的帮助把它修好。提前感谢:) 我的environment/production.rb中有这两行代码
config.action_cable.url = "ws://my_linode_domain/cable"
config.action_cable.allowed_request_origins = [/http:\/\/*/, /https:\/\/*/]
这是我的nginx配置文件
upstream app {
# Path to Puma SOCK file, as defined previously
server unix:/home/deploy/artcrate/shared/tmp/sockets/puma.sock fail_timeout=0;
}
server {
listen 80;
#server_name localhost;
server_name my_linode_domain
# prevents 502 bad gateway error
large_client_header_buffers 8 32k;
root /home/deploy/artcrate/current/public;
try_files $uri/index.html $uri @app;
location / {
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Connection '';
proxy_pass http://app;
}
location ~ ^/(assets|fonts|system)/|favicon.ico|robots.txt {
gzip_static on;
expires max;
add_header Cache-Control public;
}
location /cable{
proxy_pass http://app;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
error_page 500 502 503 504 /500.html;
client_max_body_size 4G;
keepalive_timeout 10;
}
我在位置/电缆设置中尝试了各种代理通行证选项,但均无效。每个人:)
经过一周的奋斗、努力工作和不断玩弄nginx和puma配置文件,以及一次又一次地阅读博客,我终于找到了问题所在
我的nginx配置是正确的。我不得不在puma.rb配置中再添加两行,这两行没有默认配置。这两条线是:
workers 2
daemonize true
daemonize true:这告诉puma通过生成子进程并将其从执行shell中分离出来,在后台运行。如果不使用daemonize,则需要通过nohup运行puma进程,并将其显式地放在后台
我不确定是否需要工人2,但我在解决问题时添加了他们。所以我把它放在那里。但是在添加了以上两行之后,我的ActionCable开始正常工作。我在这个项目中使用的RAILS和RUBY版本是 Rails 5.0.7 ruby 2.3.1p112 嗯。所以今天我想在我的项目中再次整合Action Cable,但又面临同样的问题。我应用了我的上述解决方案,但它不起作用。上一次虽然它工作了,但我不满意这个解决方案,因为我认为为什么ActionCable可以在本地机器上的单线程/工作线程中工作 但这次我集中精力找出了罪魁祸首 罪魁祸首是NGINX配置 当我面临404握手错误时的配置
location /cable {
proxy_pass http://example.com;
proxy_http_version 1.1;
proxy_set_header Upgrade websocket;
proxy_set_header Connection Upgrade;
}
配置时,一切都开始正常工作
location /cable {
proxy_pass http://puma;
proxy_http_version 1.1;
proxy_set_header Upgrade websocket;
proxy_set_header Connection Upgrade;
}
因此,罪魁祸首是:
proxy_pass http://example.com;
这里我们将它指向NGINX,这是错误的,它应该指向我们的puma服务器路径,在我的配置中,它由“puma”表示
以下是我在生产服务器上实施ActionCable及其工作副本的总结
因此,要将Action Cable与Rails 5集成,您需要遵循以下步骤:
谢谢。这篇文章写得不错,帮了我的忙!您建议的配置(尤其是/ws://*/和/http://*/之类的配置)非常不安全,不应驻留在任何生产环境中。在任何情况下,只有在action cable服务器作为一个单独的实例运行时才需要进行这些调整。我面临着类似的问题,但看到它偶尔发生,我使用passenger和nginx作为反向代理,任何关于如何修复的帮助都将非常棒!