Ошибка Python, Flask, Gunicorn: неизвестные аргументы

Я запускаю свое приложение app.py, используя Python и Flask. Я пытаюсь развернуть его на Heroku и выполнил шаги, описанные в этом учебник, включая создание Procfile и файла requirements.txt. Однако всякий раз, когда я запускаю heroku local, я получаю следующую ошибку:

web.1  | [2015-09-26 17:36:32 -0400] [19422] [INFO] Starting gunicorn 19.3.0
web.1  | [2015-09-26 17:36:32 -0400] [19422] [INFO] Listening at: http://0.0.0.0:5000 (19422)
web.1  | [2015-09-26 17:36:32 -0400] [19422] [INFO] Using worker: sync
web.1  | [2015-09-26 17:36:32 -0400] [19425] [INFO] Booting worker with pid: 19425
web.1  | usage: gunicorn [-h] [--auth_host_name AUTH_HOST_NAME]
web.1  | gunicorn: error: unrecognized arguments: app:app
web.1  | [2015-09-26 17:36:32 -0400] [19425] [INFO] Worker exiting (pid: 19425)

Раньше я успешно развертывал приложения на Heroku, но никогда не сталкивался с этой ошибкой. Мой Procfile — это просто одна строка: web: gunicorn app:app.

Кто-нибудь может сказать мне, как это исправить?

ОБНОВЛЕНИЕ: я изменил часть своего кода, и теперь, когда я запускаю heroku local, он работает нормально:

web.1  | [2015-09-28 18:52:13 -0400] [70650] [INFO] Starting gunicorn 19.3.0
web.1  | [2015-09-28 18:52:13 -0400] [70650] [INFO] Listening at: http://0.0.0.0:5000 (70650)
web.1  | [2015-09-28 18:52:13 -0400] [70650] [INFO] Using worker: sync
web.1  | [2015-09-28 18:52:13 -0400] [70653] [INFO] Booting worker with pid: 70653

Однако, когда я развертываю свое приложение Heroku, я получаю сообщение об ошибке приложения, и когда я проверяю журналы, я вижу ту же ошибку, что и раньше:

2015-09-28T22:50:54.775077+00:00 app[web.1]: 2015-09-28 22:50:54 [3] [INFO] Starting gunicorn 18.0
2015-09-28T22:50:54.776176+00:00 app[web.1]: 2015-09-28 22:50:54 [3] [INFO] Using worker: sync
2015-09-28T22:50:54.776052+00:00 app[web.1]: 2015-09-28 22:50:54 [3] [INFO] Listening at: http://0.0.0.0:24995 (3)
2015-09-28T22:50:54.786067+00:00 app[web.1]: 2015-09-28 22:50:54 [9] [INFO] Booting worker with pid: 9
2015-09-28T22:50:56.004336+00:00 heroku[web.1]: State changed from starting to up
2015-09-28T22:51:42.659042+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=GET path="/" host=bobawithjames.herokuapp.com request_id=1afab4c0-484e-456b-be05-3086ee0711cd fwd="160.39.250.29" dyno=web.1 connect=1ms service=39ms status=503 bytes=0
2015-09-28T22:51:42.604331+00:00 app[web.1]:                 [--noauth_local_webserver]
2015-09-28T22:51:42.604323+00:00 app[web.1]: usage: gunicorn [-h] [--auth_host_name AUTH_HOST_NAME]
2015-09-28T22:51:42.604335+00:00 app[web.1]:                 [--auth_host_port [AUTH_HOST_PORT [AUTH_HOST_PORT ...]]]
2015-09-28T22:51:42.633611+00:00 app[web.1]: gunicorn: error: unrecognized arguments: hello:app

Кто-нибудь знает, что сейчас происходит?


person frogbandit    schedule 26.09.2015    source источник
comment
попробуйте переименовать ваш файл в main.py и изменить Procfile на: web: gunicorn main:app   -  person ahmed    schedule 27.09.2015
comment
@ahmed Я попробовал это и получил ту же ошибку. Любые другие предложения?   -  person frogbandit    schedule 27.09.2015
comment
У меня такая же проблема - у кого есть решение?   -  person crarho    schedule 27.09.2015
comment
В вашем procfile, где вы указываете флаг журнала?   -  person Games Brainiac    schedule 27.09.2015
comment
@GamesBrainiac Я не указал флаг журнала - должно ли это иметь значение? Я попытался добавить флаг, и я все еще получаю сообщение об ошибке.   -  person frogbandit    schedule 28.09.2015
comment
Возможно ли, что мне не хватает определенных зависимостей? Прямо сейчас мои требования.txt имеют следующее: Flask==0.10.1 Jinja2==2.7.1 Werkzeug==0.9.4 gunicorn==18.0   -  person frogbandit    schedule 29.09.2015
comment
У меня была такая же проблема, в итоге у меня был ArgumentParser, пытающийся получить аргументы из CLI - я прокомментировал это, и это работает.   -  person euxneks    schedule 09.10.2015


Ответы (4)


Мне удалось решить эту проблему, заменив args = parser.parse_args() в моем приложении на args, unknown = parser.parse_known_args().

person Prashanth Muthurajaiah    schedule 27.11.2019
comment
На самом деле это решило мою проблему с Flask на GAE, спасибо герою. - person Hakan; 02.10.2020

Мне удалось решить мою проблему с предложением, предложенным @euxneks, а также с некоторыми вознями с Google OAuth 2.0.

По сути, руководство, которое я использовал, Python Quickstart for Google Calendar API, использовал argparse для получения флагов для учетных данных. Однако он также вызывал tools.run, что устарело. Поэтому вместо этого я решил следовать другому, более современному date tutorial, в котором рассказывается об использовании OAuth 2.0 с веб-приложением Python.

person frogbandit    schedule 10.10.2015

Проблема заключалась в наличии argparse в моем скрипте, который запускается flask/gunicorn. Поместите их внутрь:

if __name__ == "__main__":
    import argparse
    ...

Таким образом, если он запущен напрямую, вы все равно можете анализировать аргументы, запуская его автономно.

person robmsmt    schedule 26.11.2019