Ruby on rails NGinx sock连接坏网关

Ruby on rails NGinx sock连接坏网关,ruby-on-rails,nginx,puma,Ruby On Rails,Nginx,Puma,我在为Rails 4应用程序设置Nginx以与Puma服务器协作时遇到问题 问题似乎出现在我的Nginx配置中,因为我一直得到502坏网关错误,并且错误日志声明如下: *1 connect() to unix:///srv/vhosts/rumysitename/www/mysitename/tmp/mysitename.sock failed (2: No such file or directory) while connecting to upstream, client: XX.XXX

我在为Rails 4应用程序设置Nginx以与Puma服务器协作时遇到问题

问题似乎出现在我的Nginx配置中,因为我一直得到502坏网关错误,并且错误日志声明如下:

*1 connect() to unix:///srv/vhosts/rumysitename/www/mysitename/tmp/mysitename.sock failed 
(2: No such file or directory) while connecting to upstream, client: XX.XXX.XX.XXX, 
server: mysitename.com, request: "GET /favicon.ico HTTP/1.1", upstream: 
"http://unix:///srv/vhosts/rumysitename/www/mysitename/tmp/mysitename.sock:/favicon.ico", 
host: "mysitename.com"
以下是我正在使用的Nginx站点配置:

upstream mysitename {
  server unix:///srv/vhosts/rumysitename/www/mysitename/tmp/mysitename.sock;
}

server {
  listen 80;
  server_name mysitename.com;
  root /srv/vhosts/rumysitename/www/mysitename/public;

  location / {
    proxy_pass http://mysitename;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

  location ~* ^/assets/ {
    # Per RFC2616 - 1 year maximum expiry
    expires 1y;
    add_header Cache-Control public;

    # Some browsers still send conditional-GET requests if there's a
    # Last-Modified header or an ETag header even if they haven't
    # reached the expiry date sent in the Expires header.
    add_header Last-Modified "";
    add_header ETag "";
    break;
  }
}
不用说,彪马无法连接到那只袜子,因为它不在那里:

rails s -e production -b unix:///srv/vhosts/rumysitename/www/mysitename/tmp/mysitename.sock=> Booting Puma
=> Rails 4.1.0 application starting in production on http://unix:///srv/vhosts/rumysitename/www/mysitename/tmp/mysitename.sock:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Puma 2.8.2 starting...
* Min threads: 0, max threads: 16
* Environment: production
* Listening on tcp://unix:///srv/vhosts/rumysitename/www/mysitename/tmp/mysitename.sock:3000
Exiting
/srv/vhosts/rumysitename/.rvm/gems/ruby-2.1.0/gems/puma-2.8.2/lib/puma/binder.rb:195:in `initialize': getaddrinfo: Name or service not known (SocketError)

我不是系统管理员,也完全没有使用Nginx的经验,所以如果我遗漏了一些明显的东西,请原谅。

启动rails服务器并要求它绑定到unix套接字似乎不起作用。rails服务器的
-b
选项与
puma
命令的行为不同。基本上,它希望绑定到IP地址:

rails server --help
  Usage: rails server [mongrel, thin, etc] [options]
    -p, --port=port                  Runs Rails on the specified port.
                                     Default: 3000
    -b, --binding=ip                 Binds Rails to the specified ip.
                                     Default: 0.0.0.0
您可以直接运行puma:

puma -e production -b unix:///srv/vhosts/rumysitename/www/mysitename/tmp/mysitename.sock
套接字将通过像这样运行puma来创建。它不需要已经存在。您需要具有在指定位置创建它的权限,但如果不是这样,则会出现不同的错误

另一种方法是创建一个
config/puma.rb
文件,该文件可以包含以下绑定:

config/puma.rb

bind 'unix:///srv/vhosts/rumysitename/www/mysitename/tmp/mysitename.sock'
然后运行puma,引用以下内容:

puma -C config/puma.rb -e production
您可以在配置文件中放入比sock更多的内容。美洲狮是一个很好的起点。

尝试以下步骤

  • 停止puma服务器
  • 删除puma使用的
    .sock
    文件
  • 启动
    puma
    服务器

运行puma时,是否要求它绑定到该插座?类似于
puma-b的东西unix:///srv/vhosts/rumysitename/www/mysitename/tmp/mysitename.sock
。我以前对套接字的
http://
前缀感到困惑,但我认为这是日志记录中的错误,而不是配置中的错误。@Shadwell是的,我知道,我包括了我正在使用的puma start命令,它的输出在问题中你完全正确。甚至都不会考虑检查两个命令之间的差异。在我看来,它们是别名:)