Nginx Django und Gunicorn. Gunicorn Sockendatei fehlt?

7

Ich habe eine ansible eingerichtete VM basierend auf dieser Ссылка , aber aus irgendeinem Grund versuche ich, Gunicorn zu starten Folgefehler:

  

Verbindung zu /path/to/my/gunicorn.sock

nicht möglich

und in der nginx-Protokolldatei:

  

connect () zu unix: /path/to/my/gunicorn.sock ist fehlgeschlagen (2: Keine solche Datei oder Verzeichnis) während der Verbindung zu Upstream

Und tatsächlich fehlt die Socket-Datei im angegebenen Verzeichnis. Ich habe die Berechtigungen des Verzeichnisses überprüft und sie sind in Ordnung.

Hier ist mein gunicorn_start-Skript:

%Vor%

Kann irgendjemand vorschlagen, was sonst die fehlende Socket-Datei verursachen könnte?

Danke

    
kalo 24.02.2015, 06:27
quelle

4 Antworten

21

Nun, da ich nicht genügend Rep für einen Kommentar habe, werde ich hier erwähnen, dass es nicht viel Spezifität gibt, die von der fehlenden Steckdose herrührt, aber ich kann dir ein bisschen darüber erzählen, wie ich in deinen Schuhen angefangen habe und Dinge arbeiten lassen.

Das lange und kurze ist, dass Gunicorn ein Problem hatte, wenn es von Emporkömmling geführt wurde und entweder nie aufging und lief oder herunterfuhr. Hier sind einige Schritte, die Ihnen helfen können, weitere Informationen zu erhalten, um Ihr Problem aufzuspüren:

  • In meinem Fall, als das passierte, kam Gunicorn nie zur Fehlerprotokollierung, also musste ich mich woanders umsehen. Probieren Sie ps auxf | grep gunicorn aus, um zu sehen, ob Sie Arbeiter haben. Ich tat es nicht.
  • Im Syslog nach Beschwerden von Emporkömmling, grep init: /var/log/syslog , zeigte mir, dass mein Gunicorn-Service gestoppt wurde, weil er zu schnell neugestartet ist, obwohl ich bezweifle, dass das dein Problem sein wird, da du keinen Respawn hast dein Vertrauen Egal, Sie könnten dort etwas finden.
  • Nachdem ich gesehen habe, dass Gunicorn Fehler nicht ausführen konnte, habe ich beschlossen, es über die Befehlszeile auszuführen. Wechseln Sie in das Verzeichnis, in dem sich manage.py befindet, und führen Sie die erweiterte Version Ihres Upstart-Befehls für Ihre gunicorn-Instanz aus. So etwas wie (Ersetzen Sie alle Variablen durch die entsprechenden Literale anstelle des Mülls, den ich verwende.):

    /path/to/your/virtualenv/bin/gunicorn --name myapp --workers 4 --max-requests 10 --user appuser --group webusers --log-level debug --error-logfile /somewhere/I/can/find/error.log --bind unix:/tmp/myapp.socket myapp.wsgi

  • Wenn Sie Glück haben, können Sie einen Python-Traceback erhalten oder etwas in Ihrem Gunicorn-Fehlerprotokoll finden, nachdem Sie den Befehl manuell ausgeführt haben. Einige Dinge, die schief gehen können:

    • Django-Fehler (möglicherweise Probleme beim Laden Ihres Einstellungsmoduls?). Stellen Sie sicher, dass Ihr wsgi.py auf das entsprechende Einstellungsmodul auf dem Server verweist.
    • Leerzeichen in Ihrem Upstart-Skript. Ich hatte eine Registerkarte, die sich zwischen den Räumen versteckte, die Dinge versauten.
    • Benutzer / Berechtigungsprobleme. Schließlich konnte ich Gunicorn als root auf der Kommandozeile ausführen, aber nicht als Benutzer ohne root über die upstart config.

Ich hoffe, das hilft. Es war ein paar lange Tage, um diese Dinge zu verfolgen.

    
swendr 03.03.2015 08:26
quelle
8

Ich hatte das gleiche Problem, nachdem ich Michal Karzynskis großartigen Führer verfolgt hatte Einrichten von Django mit Nginx, Gunicorn, virtualenv, Supervisor und PostgreSQL '.

Und so habe ich es gelöst.

Ich hatte diese Variable im Bash-Skript, das zum Starten von Gunicorn über Supervisor verwendet wurde (myapp / bin / gunicorn_start):

%Vor%

Wenn Sie das Bash-Skript zum ersten Mal ausführen, erstellt es einen 'run'-Ordner und eine Sock-Datei mit root-Rechten . Also habe ich sudo den run-Ordner gelöscht und dann ohne sudo-Rechte neu erstellt und voila! Jetzt, wenn Sie Gunicorn oder Supervisor erneut ausführen, werden Sie nicht mehr die lästige fehlende Sockendatei Fehlermeldung haben!

TL; DR

  1. Sudo löscht den Lauf-Ordner.
  2. Erstellen Sie es ohne Sudoprivilegien neu.
  3. Führe Gunicorn erneut aus.
  4. ????
  5. Gewinn
BringBackCommodore64 15.03.2016 17:56
quelle
1

Ich hatte das gleiche Problem und fand heraus, dass ich das DJANGO_SETTINGS_MODULE im Gunicorn-Skript auf die Produktionseinstellungen gesetzt hatte und die WSGI-Einstellungen mit dev.

arbeiteten

Ich habe das DJANGO_SETTINGS_MODULE auf Dev gesetzt und alles hat funktioniert.

    
Henry Lynx 05.10.2017 10:25
quelle
0

Nun, ich habe mehr als eine Woche an diesem Thema gearbeitet und konnte es endlich herausfinden. Bitte folgen Sie den Links von digitalen Ozean , aber sie haben keine wichtigen Punkte identifiziert, die

beinhalten
  1. keine Live-Upstreams während der Verbindung zu Upstream
  2. * 4 connect () zu unix: /myproject.sock ist fehlgeschlagen (13: Berechtigung verweigert), während die Verbindung zu Upstream hergestellt wird
  3. gunicorn OSError: [Errno 1] Operation nicht erlaubt
  4. * 1 connect () zu unix: /tmp/myproject.sock ist fehlgeschlagen (2: Keine solche Datei oder Verzeichnis)

    usw.

Diese Probleme sind im Grunde Berechtigungsproblem für die Verbindung zwischen Nginx und Gunicorn . Um die Dinge einfach zu machen, empfehle ich , jedem neu erstellten file / project / python-Programm dieselbe nginx-Berechtigung zu geben .

Um das Problem zu lösen, folge diesem Ansatz: Das erste ist:

  1. Melden Sie sich als root-Benutzer beim System an
  2. Erstellen Sie das Verzeichnis / home / nginx.
  3. Danach folgen Sie den Website bis Erstellen Sie ein Upstart-Skript.
  4. Ausführen von chown -R nginx: nginx / home / nginx
  5. Führen Sie für das Upstart-Skript die folgende Änderung in der letzten Zeile aus: exec gunicorn --worker 3 --binde unix: myproject.sock -u nginx -g nginx wsgi DONT ADD -m Berechtigung, da es den Socket vermasselt. Aus der Dokumentation von Gunicorn, wenn -m Standard ist, wird python die beste Berechtigung herausfinden
  6. Starten Sie das Upstart-Skript
  7. Gehen Sie jetzt einfach zur Datei /etc/nginx/nginx.conf. Gehe zum Servermodul und füge an:

    Standort / {         enthält proxy_params;         proxy_pass http & lt; & gt;: & lt; & gt; & gt; // unix: /home/nginx/myproject.sock;         } ENTFERNEN & lt; & gt; Befolgen Sie nicht den digitalen Ozean von hier an

    1. Starten Sie jetzt den nginx-Server neu und Sie können loslegen.
Shravan Shetty 07.02.2017 08:17
quelle