2015-03-25 4 views
2

Вопрос можно разделить на две отдельные части.Как запустить приложение Flask с помощью gunicorn?

  1. У меня есть следующий проект stucture

    |- project 
    | |-- app/ - directory with actual project code 
    | |-- app.py - imports something from app/ and call create_app 
    

    Когда я бегу gunicorn я должен указать его app объект, который на самом деле создан в app.py. Так что я получаю сообщение об ошибке, потому что увольняющее лицо рассматривает пакет app:app. Единственный способ - переименовать?

  2. Я использую метод factory для создания приложения. Поэтому я импортирую create_app fuction в app.py и передаю его Manager из flask.ext.script. Я передаю объект менеджера на пушку. В этом случае gunicorn работает правильно, но как только первый запрос приходит, я получаю следующее сообщение об ошибке:

    [2015-03-25 15:38:11 +0000] [14395] [ERROR] Error handling request 
    Traceback (most recent call last): 
        File "/opt/env/local/lib/python2.7/site-packages/gunicorn/workers/async.py", line 52, in handle 
    self.handle_request(listener_name, req, client, addr) 
        File "/opt/env/local/lib/python2.7/site-packages/gunicorn/workers/ggevent.py", line 159, in handle_request 
    super(GeventWorker, self).handle_request(*args) 
        File "/opt/env/local/lib/python2.7/site-packages/gunicorn/workers/async.py", line 105, in handle_request 
        respiter = self.wsgi(environ, resp.start_response) 
    TypeError: __call__() takes at most 2 arguments (3 given) 
    

    Возможно, я мог бы создать какой-то файл wsgi.py и обеспечить текущее приложение для gunicorn?

ответ

2

У вас возникнут проблемы, если две вещи под названием «приложение» находятся в одном каталоге на пути Python.

Вам необходимо сдать экземпляр приложения Flask прямо к gunicorn. Диспетчер командной строки не является WSGI-приложением, поэтому вы получаете эту ошибку.

Вы можете просто указывать на пушки-стрельбу прямо при вызове на свою фабрику приложений, нет необходимости в каком-либо промежуточном коде.

gunicorn app:create_app() 
Смежные вопросы