Nginx Django und Gunicorn. Gunicorn sock Datei fehlt?
Ich habe eine ansible provisioned VM basierend auf dieser https://github.com/jcalazan/ansible-django-stack aber aus irgendeinem Grund versucht zu starten Gunicorn gibt die folgende Fehlermeldung:
Kann keine Verbindung zu /Pfad/zu/meinem/gunicorn.Socke
und in der nginx log-Datei:
connect() to unix:/Pfad/zu/meinem/gunicorn.sock failed (2: Keine solche Datei oder Verzeichnis) beim verbinden mit stromaufwärts
Und eigentlich die socket-Datei fehlt im angegebenen Verzeichnis. Ich habe die Berechtigungen des Verzeichnisses, und Sie sind in Ordnung.
Hier ist mein gunicorn_start Skript:
NAME="{{ application_name }}"
DJANGODIR={{ application_path }}
SOCKFILE={{ virtualenv_path }}/run/gunicorn.sock
USER={{ gunicorn_user }}
GROUP={{ gunicorn_group }}
NUM_WORKERS={{ gunicorn_num_workers }}
# Set this to 0 for unlimited requests. During development, you might want to
# set this to 1 to automatically restart the process on each request (i.e. your
# code will be reloaded on every request).
MAX_REQUESTS={{ gunicorn_max_requests }}
echo "Starting $NAME as `whoami`"
# Activate the virtual environment.
cd $DJANGODIR
. ../../bin/activate
# Set additional environment variables.
. ../../bin/postactivate
# Create the run directory if it doesn't exist.
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
# Programs meant to be run under supervisor should not daemonize themselves
# (do not use --daemon).
exec gunicorn \
--name $NAME \
--workers $NUM_WORKERS \
--max-requests $MAX_REQUESTS \
--user $USER --group $GROUP \
--log-level debug \
--bind unix:$SOCKFILE \
{{ application_name }}.wsgi
Kann jeder jeden schlagen, was sonst sollte die Ursache der fehlenden socket-Datei?
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, da habe ich nicht genug rep Kommentar, den ich hier erwähnen, dass es nicht eine Menge von Spezifität vorgeschlagen, durch die fehlende Buchse, aber ich kann Ihnen ein wenig darüber erzählen, wie ich angefangen habe in die Schuhe und bekam Dinge zu arbeiten.
Die lange und die kurze davon ist, dass gunicorn hat ein problem festgestellt beim laufen durch upstart und entweder nie laufen oder abgeschaltet werden. Hier sind einige Schritte, die Ihnen helfen können, erhalten Sie mehr info, um die Spur zu Ihrem Problem:
ps auxf | grep gunicorn
zu sehen, wenn Sie irgendwelche Mitarbeiter. Ich Tat es nicht.grep init: /var/log/syslog
zeigte mir, dass meine gunicorn service angehalten worden, da war es respawnen zu schnell, obwohl ich bezweifle, dass wir Ihr problem, da Sie nicht über einen respawn in deiner conf. Egal, vielleicht finden Sie dort etwas.Nachdem ich gunicorn wurde nicht ausgeführt oder Fehler protokollieren, habe ich beschlossen, versuchen Sie es von der Befehlszeile aus. Gehen Sie zu dem Verzeichnis, wo Ihre manage.py Leben und führen Sie die erweiterte version von Ihrem Emporkömmling, der Befehl gegen Ihr gunicorn Instanz. So etwas wie ein (Ersetzen Sie alle vars mit den entsprechenden litterals, anstatt den Müll, die ich benutze.):
/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, bekommen Sie eine python-traceback-oder finden Sie etwas in Ihrem gunicorn-error-log nach dem ausführen des Befehls manuell. Einige Dinge, die schief gehen können:
Hoffe, das hilft. Es ist schon ein paar Tage lang verfolgen diese Sachen nach unten.
Ich hatte das gleiche problem nach folgenden Michal Karzynski großen Führer 'Einrichten von Django mit Nginx, Gunicorn, virtualenv -, supervisor-und PostgreSQL'.
Und dies ist, wie ich es gelöst.
Hatte ich diese variable in der bash-Skript zum starten gunicorn über Supervisor (myapp/bin/gunicorn_start):
Die beim ausführen des bash-Skript für die erste Zeit entsteht ein " run " - Ordner und eine Socke-Datei mit root-rechten. Also habe ich sudo gelöscht die run-Ordner, und dann erneut erstellt es ohne sudo-Berechtigungen und voila! Wenn Sie jetzt erneut Gunicorn oder Supervisor Sie haben nicht die lästige fehlende Socke Datei Fehlermeldung mehr!
TL;DR
Ich hatte das gleiche problem und fand heraus, dass ich hatte die DJANGO_SETTINGS_MODULE Produktion-Einstellungen in der gunicorn-Skript und das wsgi-Einstellungen wurden mit dev.
Ich wies die DJANGO_SETTINGS_MODULE zu dev und alles funktionierte.
Gut, ich arbeitete an diesem Problem seit mehr als einer Woche und war schließlich in der Lage, um es herauszufinden.
Bitte Folgen Sie den links aus digitale Ozean , aber Sie haben nicht lokalisieren wichtigen Fragen eine, die auch
*1 connect() to unix:/tmp/myproject.sock failed (2: No such file or directory)
etc.
Diese Fragen sind im Grunde Erlaubnis für die Verbindung zwischen Nginx und Gunicorn.
Um die Dinge einfach, ich empfehle zu geben, die gleichen nginx Erlaubnis zu jeder Datei - /Projekt - /python-Programm, das Sie erstellen.
Zur Lösung des Problems befolgen Sie diese Vorgehensweise:
Erste Sache ist :
exec gunicorn --Arbeiter 3 --bind unix:myproject.Socke -u nginx -g nginx wsgi
Nicht HINZUFÜGEN -m die Erlaubnis, als es vermasselt die Steckdose. Aus der Dokumentation des Gunicorn, wenn -m ist Standard, python will herausfinden, was die beste Berechtigung
Jetzt nur noch in die /etc/nginx/nginx.conf-Datei.
Gehen Sie zu dem server-Modul und Anhängen:
location /{
gehören proxy_params;
proxy_pass http<>:<>//unix:/home/nginx/myproject.Socke;
}
ENTFERNEN <>
Folgen nicht der digitalocean Artikel von hier auf