Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails faye private_pub rails ubuntu连接被拒绝_Ruby On Rails_Nginx_Amazon Ec2_Faye_Private Pub - Fatal编程技术网

Ruby on rails faye private_pub rails ubuntu连接被拒绝

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服务器和

因此,我尝试使用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服务器和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集,所以也有。。。