Имя пользовательского модуля Procfile gunicorn

Контекст: я пишу приложение на фляге среднего размера (10-15 представлений), и в процессе я надеюсь организовать код таким образом, чтобы его было легко поддерживать и расширять (а не монолитный файл, как и большинство приложений Flask).

Структура приложения имитирует документацию следующим образом:

/AwesomeHackings
    /ENV
    /AwesomeHackings
        /models
        /static
        /templates
        /__init__.py
        /awesome.py
        /awesome.cfg
    /Procfile
    /README.MD
    /requirements.txt
    /run.py

Проблема: я не могу заставить мастера работать с фляжным приложением, которое не называется "приложение". Я бы хотел, чтобы run.py был точкой входа в мое приложение.

Я использую gunicorn + gevent, и мой текущий Procfile содержит:

web: gunicorn -w 2 -b 0.0.0.0:$PORT -k gevent app:run

Я использовал run.py для тестирования приложения:

from AwesomeHackings import awesome
awesome.app.run(debug=True)

Таким образом, я предположил, что могу просто заменить run на app в Procfile, но при выполнении foreman start gunicorn терпит неудачу с бессмысленным многословием о модулях.


person Cory Dolphin    schedule 20.05.2012    source источник


Ответы (1)


Я нашел решение в документации Django. Основным параметром gunicorn является модуль:

gunicorn [OPTIONS] APP_MODULE

Где APP_MODULE относится к шаблону MODULE_NAME:VARIABLE_NAME

Хотя кажется логичным, что синтаксис должен быть аргументом ключевого слова app:someIdentifier, поскольку во всех руководствах используется модуль с именем app, на самом деле это не так. Правильный аргумент для моей ситуации был run:app.

person Cory Dolphin    schedule 20.05.2012
comment
У меня очень похожая настройка, и хотя я понимаю, почему это будет работать: приложение, оно все еще не работает с моей стороны. Что именно находится в вашем файле awesome.py? - person Caroline; 07.04.2014
comment
В этом случае awesome.py содержит определение объекта приложения (и, когда я писал простые монолитные фляжные приложения, все представления и т. д.). Из каталога, в котором вы запускаете gunicorn, как бы вы импортировали объект «приложение»? т.е. из приложения импорта foo. Этот модуль, комбинация имен переменных - это то, что нужно передать пушке. Можете ли вы предоставить больше информации и деталей о вашей настройке? Рады помочь по электронной почте (мое имя пользователя @gmail.com) - person Cory Dolphin; 08.04.2014
comment
Для чьей-либо будущей ссылки. Я исправил свою проблему и объяснил, как в stackoverflow.com/questions/22921187/ . - person Caroline; 11.04.2014