2016-04-21 34 views
1

所以我试图设置一个使用Bryan Bate的private_pub gem(faye gem的包装)创建聊天频道的Rails应用程序。它在我的本地机器上以开发模式运行良好。faye private_pub rails ubuntu连接拒绝

我也正在同时我的Rails应用程序通过包括与线初始化文件开始启动了端口8080上private_pub服务器:

Thread.new do 
    system("rackup private_pub.ru -s thin -E production -p 8080") 
end 

然而,随着部署到AWS EC2 Ubuntu的实例后nginx网络服务器和美洲狮应用服务器,Chrome控制台每隔2秒就会显示一次,实时聊天功能不起作用。

GET http://localhost:8080/faye.js net::ERR_CONNECTION_REFUSED 

如果我在AWS安全组打开8080端口,我可以看到JavaScript代码中使用curl从本地主机faye.js的大块:faye.js 8080 /当我使用SSH连接实例。如果我去http://my.apps.public.ip:8080/faye.js,我也可以从我的浏览器访问它。如果我从安全组中删除8080,我无法访问它,所以我不认为这是防火墙问题。另外,如果我将地址从本地主机更改为0.0.0.0或公共IP用于我的ec2实例,则Chrome控制台错误消失,但实时聊天仍不起作用。

我怀疑我可能要做更多的配置nginx的,因为所有到目前为止,我还做了配置nginx的服务器是在/ etc/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无关,我很迷茫。有没有人遇到过这个问题,或者可以提出一个替代方案如果需要,我可以在这里发布任何其他配置文件。

+0

我没有一个完整的答案,但我可以告诉部分问题是在nginx中使用'server_name localhost;'。 Chrome正在指出这是告诉客户端(你在这种情况下)连接到使用名称“localhost”,因此你得到了'GET http:// localhost:8080/faye.js net :: ERR_CONNECTION_REFUSED '因为你的浏览器试图连接到localhost:8080(你自己的计算机),因为你没有运行任何服务器,所以它拒绝连接。 请在这里寻找关于server_name的帮助:http://nginx.org/en/docs/http/server_names.html –

+0

谢谢伊恩,我认为你是对的。你指出这一点后,我意识到,有时我看到铬的错误,其他时间我没有,因为我有时也有我的本地机器上运行的Faye服务器。我在本地启动我的主应用程序而不启动Faye服务器,然后看到相同的错误。所以现在我只需要为Faye服务器找到合适的Nginx配置。非常感谢! – ChaiTea

+1

看起来您可以将其设置为您的AWS服务器的IP(如果它是静态的),或者如果您觉得疯狂'_'(下划线)是一个全面的。意味着任何连接(到端口80)都将被接受。这主要用于一台服务器可以托管多个网站,并且它们路由正确。我也刚刚注意到在启动时你告诉它使用8080端口,而你的配置只有80个设置,所以也有... –

回答

1

解决

首先我把伊恩的意见,并设置服务器名到我的公网IP

然后

基于从http://www.johng.co.uk/2014/02/18/running-faye-on-port-80/

引导我添加的地点块

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; 
    } 

最后,我private_pub.yml我的集生产王菲切入点:

production: 
    server: "http://my.public.ip:80/faye/faye" 
    secret_token: "mysecrettoken" 
    signature_expiration: 3600 # one hour 

,现在在我的应用程序的响应聊天时相比,我使用我把在Heroku上的远程独立聊天服务器是更快因为聊天服务器和我的主应用都在同一个实例中运行。