因此,我尝试使用 Bryan Bate 的 private_pub gem(faye gem 的包装器)设置一个 rails 应用程序来创建聊天频道。它在我的本地机器上的开发模式下运行良好。
我还在端口 8080 上启动 private_pub 服务器,同时我的 rails 应用程序通过包含以下行的初始化文件启动:
Thread.new do
system("rackup private_pub.ru -s thin -E production -p 8080")
end
但是,在使用 nginx 网络服务器和 puma 应用服务器部署到 aws ec2 ubuntu 实例后,chrome 控制台每 2 秒显示一次,并且实时聊天功能不起作用。
GET http://localhost:8080/faye.js net::ERR_CONNECTION_REFUSED
如果我在我的 aws 安全组中打开端口 8080,当我 ssh 进入实例时,我可以使用来自 localhost:8080/faye.js 的 curl 看到 faye.js 中的大量 javascript 代码。如果我访问http://my.apps.public.ip:8080/faye.js ,我也可以从浏览器访问它。如果我从安全组中删除 8080,我将无法访问它,所以我认为这不是防火墙问题。
此外,如果我将地址从 localhost 更改为 0.0.0.0 或我的 ec2 实例的公共 ip,chrome 控制台错误消失了,但实时聊天仍然无法正常工作。
我怀疑我可能需要对 nginx 进行更多配置,因为到目前为止我为配置 nginx 服务器所做的一切都在 /etc/nginx/sites-available/default 中,我有:
upstream app {
server unix:/home/deploy/myappname/shared/tmp/sockets/puma.sock fail_timeout=0;
}
server {
listen 80;
server_name localhost;
root /home/deploy/myappname/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;
}
error_page 500 502 503 504 /500.html;
client_max_body_size 4G;
keepalive_timeout 10;
}
但也许这也与 nginx 无关,我很迷茫。有没有人经历过这种情况或可以提出替代解决方案?如果需要,我可以在此处发布任何其他配置文件。