Nginx ne peut pas trouver le fichier de socket unix avec Unicorn (pas un tel fichier ou répertoire)

Je déploie une application Rails 4 sur un serveur Fedora 19 x64 utilisant Nginx et Unicorn. Le problème est que je reçois une erreur en visitant l’adresse: “Nous sums désolés, mais quelque chose a mal tourné.”

Mon journal des erreurs Nginx ( /var/log/nginx/error.log ) indique:

 2014/03/08 03:50:12 [warn] 23934#0: conflicting server name "localhost" on 0.0.0.0:80, ignored 2014/03/08 03:50:12 [warn] 23936#0: conflicting server name "localhost" on 0.0.0.0:80, ignored 2014/03/08 03:50:14 [crit] 23939#0: *1 connect() to unix:/tmp/unicorn.[app name].sock failed (2: No such file or directory) while connecting to upstream, client: [client IP], server: localhost, request: "GET /v1/indussortinges/1.xml HTTP/1.1", upstream: "http://unix:/tmp/unicorn.[app name].sock:/v1/indussortinges.json", host: "api.[app name].ca" 

Pour autant que je sache, Nginx ne sait pas que le socket existe. Cependant, en regardant dans /tmp , il fait:

 [root@localhost tmp]# ls unicorn.[app name].sock 

Je rest bloqué à ce stade, peu importe la manière dont je modifie mon fichier de configuration Unicorn ou mon fichier de configuration Nginx. Les deux sont:

/ var / www / [nom de l’application] /config/unicorn.rb :

 working_directory "/var/www/[app name]" pid "/var/www/[app name]/pids/unicorn.pid" stderr_path "/var/www/[app name]/log/unicorn.log" stdout_path "/var/www/[app name]/log/unicorn.log" listen "/tmp/unicorn.[app name].sock" worker_processes 2 timeout 30 

/etc/nginx/conf.d/default.conf :

 upstream app { server unix:/tmp/unicorn.[app name].sock fail_timeout=0; } server { listen 80; server_name localhost; root /var/www/[app name]/public; try_files $uri/index.html $uri @app; location @app { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://app; } error_page 500 502 503 504 /500.html; client_max_body_size 4G; keepalive_timeout 10; } 

La façon dont j’ai commencé ces deux démons est la suivante:

 unicorn_rails -c /var/www/[app name]/config/unicorn.rb -D -E production service nginx start 

Les journaux Unicorn ne contiennent aucune information pertinente, pas plus que les journaux de production. Cette configuration semble simple, quelqu’un a-t-il déjà expérimenté cela? Merci pour toute l’aide que vous pouvez apporter.

Au fait, je suivais initialement ce tutoriel: https://www.digitalocean.com/community/articles/how-to-deploy-rails-apps-using-unicorn-and-nginx-on-centos-6-5

    Après plusieurs heures et un total de 3 bières, j’ai réussi à comprendre le problème. Après des heures de recherche, je suis finalement tombé sur cette réponse de faute de serveur

    En termes simples, il semble que les programmes qui créent des fichiers dans /tmp (ou /var/tmp comme je l’ai découvert) sont les seuls programmes capables de voir les fichiers dans ce répertoire. Unicorn créait le fichier de socket UNIX, mais Nginx ne pouvait pas le voir.

    La solution que j’ai employée consiste à faire en sorte que Unicorn crée des sockets dans /var/sockets .

    J’ai soudainement eu une situation similaire après avoir changé nginx pour utiliser un service de démarrage systemd basé sur leur modèle .

    Il en résulte que le problème était avec PrivateTmp=true , ce qui fait que nginx n’a pas pu accéder au fichier de socket créé par gunicorn. Une fois que j’ai changé cela en PrivateTmp=false l’erreur a été résolue.