Ruby on rails faye private_pub rails ubuntu连接被拒绝
因此,我尝试使用Bryan Bate的私有_pub gem(faye gem的包装器)创建一个rails应用程序来创建聊天频道。在开发模式下,它在我的本地机器上工作得很好 我还在端口8080上启动private_pub服务器,同时我的rails应用程序启动时包含一个初始化文件,其中包含以下行:Ruby on rails faye private_pub rails ubuntu连接被拒绝,ruby-on-rails,nginx,amazon-ec2,faye,private-pub,Ruby On Rails,Nginx,Amazon Ec2,Faye,Private Pub,因此,我尝试使用Bryan Bate的私有_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 Web服务器和
Thread.new do
system("rackup private_pub.ru -s thin -E production -p 8080")
end
然而,在使用nginx Web服务器和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代码。如果转到,我也可以从浏览器访问它。如果我从安全组中删除8080,我将无法访问它,因此我认为这不是防火墙问题
此外,如果我将地址从localhost更改为0.0.0.0,或者将我的ec2实例的公共ip更改为0.0.0,chrome控制台错误将消失,但实时聊天仍然不起作用
我怀疑我可能需要对nginx进行更多的配置,因为到目前为止,我在/etc/nginx/sites available/default中配置了nginx服务器,我已经:
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也没什么关系,我很迷茫。有没有人经历过这种情况,或者可以提出其他解决方案?如果需要,我可以在此发布任何其他配置文件。已解决 首先,我接受了Ian的建议,将服务器名称设置为我的公共ip 然后 基于 我添加了位置块
location ^~ /faye {
proxy_pass http://127.0.0.1:9292/faye;
proxy_redirect off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
proxy_buffering off;
proxy_cache_bypass $http_pragma $http_authorization;
proxy_no_cache $http_pragma $http_authorization;
}
最后,对于我的私人_pub.yml,我为生产设置了faye入口点:
production:
server: "http://my.public.ip:80/faye/faye"
secret_token: "mysecrettoken"
signature_expiration: 3600 # one hour
现在,我的应用程序中的聊天响应比我使用heroku上安装的远程独立聊天服务器时快得多,因为聊天服务器和我的主应用程序都在同一个实例中运行。我没有完整的答案,但我可以说部分问题与您使用的
服务器名称localhost。Chrome指出,这是在告诉要连接的客户端(在本例中是您)使用的是“localhost”名称,因此您得到的是GEThttp://localhost:8080/faye.js net::ERR_CONNECTION_被拒绝
,因为您的浏览器正试图连接到localhost:8080(您自己的计算机),它,由于您没有运行任何服务器,正在拒绝连接。请参阅此处以获取有关服务器名称的帮助:谢谢伊恩,我认为你是对的。在你指出这一点后,我意识到,有时我在chrome中看到错误,而有时我没有看到错误,是因为我有时也在本地机器上运行Faye服务器。我在没有本地启动Faye服务器的情况下启动我的主应用程序进行了测试,我看到了相同的错误。现在我只需要为Faye服务器找到合适的Nginx配置。谢谢!看起来您可以将其设置为AWS服务器的IP(如果它是静态的),或者,如果您觉得疯狂,则可以将其设置为全部。意味着任何连接(到端口80)都将被接受。这主要用于使一台服务器可以承载多个网站,并且这些网站的路由正确。我还注意到,在启动时,你告诉它使用8080端口,而你的配置只有80集,所以也有。。。