2016-07-17 30 views
2

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

Antwort

6

Config Sind Sie sicher, dass Sie Puma laufen mit dieser Konfiguration? Ich glaube nicht, rails server ist der richtige Weg, um Puma in einer Produktionsumgebung zu starten.

Ich würde dies statt:

RACK_ENV=production bundle exec puma -C config/puma.rb 

Sobald Sie manuell diese Arbeit zu bekommen, verwenden Sie dann die --daemon Flagge auf den Server im Hintergrund laufen zu halten.

Auch, wo ist shared_dir in Ihrer config/puma.rb definiert? Vielleicht haben Sie den Teil der Datei weggelassen, wenn nicht, stellen Sie sicher, dass Sie den richtigen Wert eingeben.

+0

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