问题
I need to deploy my rails application,So I have followed all step from here, https://www.digitalocean.com/community/tutorials/how-to-deploy-a-rails-app-with-puma-and-nginx-on-ubuntu-14-04
But end of the tutorial, I get this error --> "502 Bad Gateway"
EDIT
The error message now --> "We're sorry, but something went wrong."
But Nginx error output is the same, I check puma error messages but they just log when it start and when it stop gracefully.
Rails logs which is under app_directory/log does not produce any output.
puma-manager --> I checked it works correctly
paths ---> I have checked three times
Nginx error.log output message:
2016/05/18 14:22:21 [crit] 1099#0: *7 connect() to unix:/home/deploy /hotel-automata/shared/sockets/puma.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.2.105, server: localhost, request: "GET /favicon.ico HTTP/1.1", upstream: "http://unix:/home/deploy/hotel-automata/shared/sockets/puma.sock:/500.html", host: "192.168.2.170"
OS -> Vmware Player, Bridged Network Ubuntu Server 14.0.4
Ruby Version: 2.3.1
Rails Version: 4.2.5.2
This is my nginx config contents of /etc/nginx/sites-available/default
upstream app {
# Path to Puma SOCK file, as defined previously
server unix:/home/deploy/hotel-automata/shared/sockets/puma.sock fail_timeout=0;
}
server {
listen 80;
server_name localhost;
root /home/deploy/hotel-automata/public;
try_files $uri/index.html $uri @app;
location @app {
proxy_pass http://app;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
}
error_page 500 502 503 504 /500.html;
client_max_body_size 4G;
keepalive_timeout 10;
}
回答1:
EDIT:
- Make user that the socket exist. Otherwise it's failing on this point:
in config/puma.rb
you need to have line pointing to your socket:
bind "unix://<path or variable for the path where the socket will be>/sockets/puma.sock"
example with variable:
application_path = '/home/deploy/hotel-automata/shared'
bind "unix://#{application_path}/sockets/puma.socket"
- Check permissions on the socket
You will need to make sure that Nginx is able to access your socket (have the required rights i.e. RW)
The check the permissions on the whole path try this:
namei -m /home/deploy/hotel-automata/shared/sockets/puma.sock
Alternatively try this:
sudo -u <user> test <-r / -w > <path> && echo True
i.e.
sudo -u nginx test -w /home/deploy/hotel-automata/shared/sockets/puma.sock && echo True
Nginx will require RW access to that socket.
If it doesn't return true then it means that the user has NOT got that permission i.e. -w -> write
回答2:
Your puma.rb
file should look like this.
# /config/puma.rb
app = "manabalss" # App-specific
root = "/home/deployer/apps/#{app}"
workers 5
threads 1, 1 # relying on many workers for thread-unsafe apps
rackup DefaultRackup
port 11592
environment ENV['RACK_ENV'] || 'production'
daemonize true
pidfile "#{root}/puma/puma.pid"
stdout_redirect "#{root}/puma/puma.log", "#{root}/puma/puma_error.log"
bind "unix:/tmp/puma.socket
And your nginx.conf should be like this.
# config/deploy/nginx.conf
upstream puma {
server unix:/tmp/puma.socket fail_timeout=1;
}
# This block redirects http requests to https version
server {
listen 37.139.0.211:80 default deferred;
server_name www.manabalss.lv, manabalss.lv;
return 307 https://manabalss.lv$request_uri;
}
server {
listen 37.139.0.211:443 ssl;
server_name manabalss.lv;
ssl_certificate /etc/ssl/server.crt;
ssl_certificate_key /etc/ssl/server.key;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers RC4:HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL:15m;
ssl_session_timeout 15m;
root /home/deployer/apps/manabalss/current/public;
location ^~ /assets/ {
gzip_static on;
gzip_vary on;
expires max;
add_header Cache-Control public;
}
try_files $uri/index.html $uri @puma;
location @puma {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://puma;
}
error_page 500 502 503 504 /500.html;
client_max_body_size 4G;
keepalive_timeout 10;
}
If this doesn't help, you would like to have a look at this.
Rails + Puma + Nginx Every Bad Gateway 502
来源:https://stackoverflow.com/questions/37298451/puma-and-nginx-502-bad-gateway-error-ubuntu-server-14-04