Ich stelle meine Rails App mit nginx, puma und capistrano bereit. Es heißt von einem Benutzer bereitgestellt deploy
und die deploy Lage ist unter dem Home-Verzeichnis (/home/deploy
)Puma erstellt keinen Sockel an einem definierten Ort, wenn er mit `rails server` gestartet wurde
Ich habe Puma einen Sockel unter dem shared
Ordner zu erstellen, konfiguriert, die Capistrano symbolisch verlinkt all seinen Versionen. Entsprechend nginx ist so konfiguriert, wie auch in dieser Fassung zu betrachten (siehe Konfigurationsdateien unten)
Allerdings, wenn ich die Rails/Puma Webserver starten -
cd /home/deploy/my_app/current
SECRET_KEY_BASE=.... DATABASE_PASSWORD=... rails s -e production
Ich stelle fest, dass keine Socket-Datei erstellt wird. Wenn ich die Website in meinem Browser besuche und dann das Nginx-Fehlerprotokoll anschaue, klagt es darüber, dass der Socket nicht existiert.
2016/07/17 14:26:19 [crit] 26055#26055: *12 connect() to unix:/home/deploy/my_app/shared/tmp/sockets/puma.sock failed (2: No such file or directory) while connecting to upstream, client: XX.YY.XX.YY, server: localhost, request: "GET http://testp4.pospr.waw.pl/testproxy.php HTTP/1.1", upstream: "http://unix:/home/deploy/my_app/shared/tmp/sockets/puma.sock:/500.html", host: "testp4.pospr.waw.pl"
Wie gehe ich über Puma, um diesen Sockel zu erstellen?
Danke!
Puma Config
# config/puma.rb
...
# `shared_dir` is the symlinked `shared/` directory created
# by Capistrano - `/home/deploy/my_app/shared`
# Set up socket location
bind "unix://#{shared_dir}/tmp/sockets/puma.sock"
# Logging
stdout_redirect "#{shared_dir}/log/puma.stdout.log", "#{shared_dir}/log/puma.stderr.log", true
# Set master PID and state locations
pidfile "#{shared_dir}/tmp/pids/puma.pid"
state_path "#{shared_dir}/tmp/pids/puma.state"
activate_control_app
...
Nginx Websites
# /etc/nginx/sites-available/default
upstream app {
# Path to Puma SOCK file
server unix:/home/deploy/my_app/shared/tmp/sockets/puma.sock fail_timeout=0;
}
server {
listen 80;
server_name localhost;
root /home/deploy/my_app/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;
}
Sie hatten absolut Recht. Ich musste es direkt mit dem Befehl 'puma' starten. Aus irgendeinem Grund ging ich davon aus, dass der Puma-Edelstein die Verwendung von Puma als Hauptserver als Standard festlegen würde, und so rief 'rails server' puma an. Anfängerfehler, denke ich - danke! – user2490003