2013-03-08 11 views
6

Próbuję uruchomić Gunicorn z Supervisora ​​w systemie Ubuntu 12.04. Gunicorn uruchamia aplikację Flask (prosta usługa sieciowa REST przetestowana z wbudowanym serwerem Flask). Zainstalowałem Gunicorn przez klonowanie repozytorium GIT, starając się uniknąć "apt-get install", ponieważ uruchamia serwer Gunicorn podczas instalacji. Nie chcę, żeby był uruchomiony, będzie on obsługiwany tylko przez Supervisora.Inspektor nie pracuje z Gunicornem + Flask

Więc po zainstalowaniu go, gdy próbuję:

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

Gunicorn działa. Potem zabiję to. Uwaga plik konfiguracyjny bez rozszerzenia, ponieważ z rozszerzeniem ".py" nie działa dla mnie. Więc mogę edytować plik konfiguracyjny Inspektora jak:

[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 

i aktualizowania zmian w Promotor:

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

wykrywa zmiany w pliku i działa dla programu Gunicorn. Ok, ale wtedy staram się go uruchomić:

supervisorctl start gunicorn 

coraz irytujące:

gunicorn: ERROR (abnormal termination) 

Sprawdzanie dziennika przełożonego:

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 

Nie wiem co teraz zrobić .. . Możesz mi pomóc? Thx dużo!

EDIT: Przepraszam, zapomniałem powiedzieć, że eksportowane zmiennej PYTHONPATH jak:

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

'my_app' znajduje się w katalogu/usr/local/bin. Ścieżka do biblioteki jest potrzebna dla innych modułów. Mam również Supervisor edytowany plik konfiguracyjny, aby wskazać zmienną środowiskową, jak:

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

ale nie działa.

EDIT 2: jak @robertklep sugeruje w swoim komentarzu, to jest wyjściowych dziennika za:

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. 

moduł 'const' znajduje się w katalogu/usr// lib/projektu miejscowego ...

Odpowiedz

8

I don „t see you ustawienie środowiska w przełożonym pliku konfiguracyjnym:

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

Jeśli to nie zadziała, spróbuj uruchomić gunicorn w trybie debugowania:

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

Albo przechodzą ścieżkę bezpośrednio do gunicorn:

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

EDIT: gunicorn na --pythonpath jest uszkodzony, można przekazać tylko jeden katalog:

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

Tak, zrobiłem to i edytowałem swoje pytanie w tym samym czasie, w którym mi odpowiadasz ... przepraszam! Robię to, co powiedziałeś, czekaj na to! :) –

+0

Mówi mi, że nie może znaleźć modułu "const", ale jest w/usr/local/lib/project, dodane do środowiska w pliku konfiguracyjnym Supervisora ​​... –

+0

Zobacz moją edycję dotyczącą przejścia bezpośrednio do gunicorn. – robertklep

3

To nie jest konieczne podanie --pythonpath .Jeśli pracujesz w wirtuenie, dodajesz, gdzie jest gunicorn. Przykład:

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

i katalog jest, gdy kod Kolba jest przykładem:

directory=/home/virtualenv/myapp 

Pamiętaj użytkownik root!

user=root