gpt4 book ai didi

ruby-on-rails - NGinx sock 连接坏网关

转载 作者:行者123 更新时间:2023-12-01 11:39:10 24 4
gpt4 key购买 nike

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

问题似乎出在我的 Nginx 配置上,因为我不断收到 502 Bad Gateway 错误,错误日志指出以下内容:

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

不用说,Puma 无法连接到那只 socks ,因为它不在那里:

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 server 并要求它绑定(bind)到 unix 套接字不起作用。 rails 服务器的 -b 选项与 puma 命令的行为不同。基本上它想绑定(bind)到一个 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 文件,其中可以包含绑定(bind):

config/puma.rb:

bind 'unix:///srv/vhosts/rumysitename/www/mysitename/tmp/mysitename.sock'

然后运行 ​​puma 引用:

puma -C config/puma.rb -e production

你可以在配置文件中放置更多的东西,而不仅仅是 socks 。美洲狮example config file是一个很好的起点。

关于ruby-on-rails - NGinx sock 连接坏网关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23417473/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com