8

我正在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

有谁知道现在发生了什么?

4

4 回答 4

13

我能够通过将我的应用程序中的args = parser.parse_args()替换为args, unknown = parser.parse_known_args()来解决这个问题

于 2019-11-27T10:18:43.327 回答
5

问题在于我的脚本中有 argparse 由烧瓶/gunicorn 运行。把这些放在一个:

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

这样,如果它直接运行,您仍然可以解析独立运行它的参数。

于 2019-11-26T17:07:30.170 回答
4

我设法解决了我的问题,@euxneks 提出的建议,以及一些与 Google OAuth 2.0 相关的问题。

从本质上讲,我一直在使用的教程Python Quickstart for Google Calendar API用于argparse获取凭据的标志。但是,它也在调用tools.run,已被弃用。因此,我决定遵循一个不同的、更新的教程,它将引导您完成将 OAuth 2.0 与 Python Web 应用程序一起使用。

于 2015-10-10T00:18:11.913 回答
1

遵循教程时,我遇到了同样的问题。我删除了--log-file他们示例中显示的标志。此外,我还修改了字符串,使其引用我的应用目录 [/app/wsgi.py] 下的 wsgi.py 应用程序,如下所示:

web: gunicorn app.wsgi

希望这可以帮助!

于 2018-06-04T15:18:50.573 回答