Python,Flask,Gunicorn错误:无法识别的参数

时间:2015-09-26 21:41:16

标签: python heroku flask gunicorn procfile

我正在使用Python和Flask运行我的应用app.py。我尝试将其部署到Heroku,然后按照this tutorial中的步骤进行操作,包括制作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 个答案:

答案 0 :(得分:4)

我设法解决了我的问题,建议@euxneks提议,以及一些搞乱Google OAuth 2.0。

基本上,我一直使用的教程Python Quickstart for Google Calendar API正在使用argparse来获取凭据的标志。但是,它也在调用tools.run,这已被弃用。因此,我决定使用different, more up-to-date tutorial,它会引导您使用OAuth 2.0和Python Web App。

答案 1 :(得分:1)

在关注tutorial时,我遇到了同样的问题。我删除了他们示例中显示的--log-file标记。 另外,我还修改了字符串,因此它引用了我的app目录下的wsgi.py应用程序[/app/wsgi.py],如下所示:

web: gunicorn app.wsgi

希望这有帮助!

答案 2 :(得分:1)

问题出在我的脚本中有argparse,该文件由flask / gunicorn运行。将它们放在一个:

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

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

答案 3 :(得分:0)

我可以通过将应用中的 args = parser.parse_args()替换为 args,unknown = parser.parse_known_args()

来解决此问题