2013-03-08 9 views
6

Ich versuche, Gunicorn von Supervisor in einem Ubuntu 12.04 System laufen zu lassen. Gunicorn betreibt eine Flask-App (einfacher REST-Webdienst, der mit Flasks Embedded-Server getestet wurde). Ich habe Gunicorn installiert, indem ich GIT Repo geklont habe, um zu vermeiden, 'apt-get install' zu bekommen, weil es Gunicorn Server ausführt, wenn es installiert wird. Ich möchte nicht, dass es läuft, es wird nur vom Supervisor ausgeführt.Supervisor funktioniert nicht mit Gunicorn + Flask

So installieren, nachdem es, wenn ich versuche:

cd /usr/local/bin 
gunicorn my_app:app -c /path/to/gu_config_file 

Gunicorn arbeitet. Dann töte ich es. Hinweis Konfigurationsdatei ohne Erweiterung, weil mit '.py' Erweiterung funktioniert nicht für mich. Also ich Supervisor-config-Datei wie bearbeiten:

[program:gunicorn] 
command=/usr/local/bin/gunicorn my_app:app -c /path/to/.gu_setup 
directory=/usr/local/bin/ 
autostart=true 
autorestart=true 
redirect_stderr=True 

Und Update Änderungen Betreuer:

supervisorctl reread 
# gunicorn: changed 
supervisorctl update 
# gunicorn: stopped 
# gunicorn: updated process group 

Ermittelt Änderungen in der Datei und arbeitet für Gunicorn Programm. Ok, aber dann versuche ich es zu starten:

supervisorctl start gunicorn 

eine lästige Anfahrt:

gunicorn: ERROR (abnormal termination) 

Überprüfung Supervisor Protokoll:

2013-03-08 13:07:22,378 INFO spawned: 'gunicorn' with pid 3355 
2013-03-08 13:07:22,916 INFO exited: gunicorn (exit status 3; not expected) 
2013-03-08 13:07:23,918 INFO spawned: 'gunicorn' with pid 3361 
2013-03-08 13:07:24,492 INFO exited: gunicorn (exit status 3; not expected) 
2013-03-08 13:07:26,496 INFO spawned: 'gunicorn' with pid 3367 
2013-03-08 13:07:27,078 INFO exited: gunicorn (exit status 3; not expected) 
2013-03-08 13:07:30,085 INFO spawned: 'gunicorn' with pid 3373 
2013-03-08 13:07:30,628 INFO exited: gunicorn (exit status 3; not expected) 
2013-03-08 13:07:31,630 INFO gave up: gunicorn entered FATAL state, too many start retries too quickly 

Ich weiß nicht, was jetzt zu tun .. . Kannst du mir helfen? Vielen Dank!

EDIT: sorry ich vergaß zu sagen, ich PYTHONPATH Variable exportiert als:

export PYTHONPATH=/usr/local/bin:/usr/local/lib/project 

'my_app' in/usr/local/bin ist. Der lib-Pfad wird für andere Module benötigt. Ich habe auch Supervisor-Config-Datei bearbeitet Umgebungsvariable, um anzuzeigen, wie:

environment=PYTHONPATH=/usr/local/bin:/usr/local/lib/project/ 

Aber hat nicht funktioniert.

EDIT 2: als @robertklep in seinem Kommentar vorschlagen, diese Ausgabe des ist log:

Traceback (most recent call last): 
    File "/tmp/gunicorn/gunicorn/arbiter.py", line 485, in spawn_worker 
    worker.init_process() 
    File "/tmp/gunicorn/gunicorn/workers/base.py", line 100, in init_process 
    self.wsgi = self.app.wsgi() 
    File "/tmp/gunicorn/gunicorn/app/base.py", line 103, in wsgi 
    self.callable = self.load() 
    File "/tmp/gunicorn/gunicorn/app/wsgiapp.py", line 25, in load 
    return util.import_app(self.app_uri) 
    File "/tmp/gunicorn/gunicorn/util.py", line 369, in import_app 
    __import__(module) 
    File "/usr/local/bin/my_app.py", line 4, in <module> 
    import const 
ImportError: No module named const 
2013-03-08 13:29:35 [3670] [INFO] Worker exiting (pid: 3670) 
2013-03-08 13:29:36 [3665] [INFO] Shutting down: Master 
2013-03-08 13:29:36 [3665] [INFO] Reason: Worker failed to boot. 

'const' Modul ist in/usr/local/lib/Projekt ...

Antwort

8

I don ‚t sehen Sie die Umgebung in Ihren Vorgesetzten Konfigurationsdatei festlegen:

[program:gunicorn] 
environment=PYTHONPATH=/usr/local/bin:/usr/local/lib/project 
command=/usr/local/bin/gunicorn my_app:app -c /path/to/.gu_setup 
... 

Wenn das nicht funktioniert, versuchen Sie gunicorn im Debug-Modus starten:

command=/usr/local/bin/gunicorn --debug --log-level debug my_app:app -c /path/to/.gu_setup 

oder den Pfad passieren direkt an gunicorn:

command=/usr/local/bin/gunicorn --pythonpath /usr/local/bin,/usr/local/lib/project my_app:app -c /path/to/.gu_setup 

EDIT: gunicorn des --pythonpath gebrochen ist, nur ein Verzeichnis passieren kann:

command=/usr/local/bin/gunicorn --pythonpath /usr/local/lib/project my_app:app -c /path/to/.gu_setup 
+0

Ja, ich habe das getan und meine Frage bearbeitet, während Sie mir antworten ... Entschuldigung! Ich tue, was du gesagt hast, warte darauf! :) –

+0

So sagt mir, es kann nicht finden, const 'Modul, aber es ist in/usr/local/lib/project, hinzugefügt Umgebung in Supervisor Config-Datei ... –

+0

Siehe meine Bearbeitung über die Übergabe des Pfades direkt nach Gunicorn. – robertklep

3

Es ist nicht notwendig Pass --pythonpath .Wenn Sie virtuanenv arbeiten, fügen Sie hinzu, wo Gunicorn ist. Beispiel:

command=/home/virtualenv/bin/gunicorn application:app -c /home/virtualenv/deploy/gunicorn.conf.py 

und das Verzeichnis ist, wenn Flask-Code, Beispiel:

directory=/home/virtualenv/myapp 

Denken Sie daran, Benutzer root!

user=root