Gunicorn通过导致404

时间:2018-04-29 16:22:20

标签: python python-3.x heroku flask gunicorn

我在Heroku上使用Gunicorn尝试提供基本网页,如果我使用普通的路径装饰器,它可以正常工作。例如:

from flask import Flask

app = Flask(__name__)
@app.route('/')
def a():
    return "b"
if __name__ == "__main__":
    app.run()

此代码运行正常,并在索引处正确提供“b”。但是,如果不是使用路径装饰器,而是使用add_url_route函数,它只响应404.

from flask import Flask

app = Flask(__name__)
def a():
    return "b"
if __name__ == "__main__":
    app.add_url_rule('/', 'index', a)
    app.run()

这是我的Procfile:

web: gunicorn test:app --log-file=-

值得注意的是,当我使用Python(python test.py)从命令行运行它时,两者都能正常工作。我在这里做错了吗? 我正在使用Python 3.6.3和Flask 0.12.2。

1 个答案:

答案 0 :(得分:2)

app.add_url_rule行仅在您直接运行python脚本时执行。当您只导入脚本时(这就是gunicorn所做的那样),根本没有配置路由,任何请求都会产生404

这也解释了为什么两个版本在本地执行时都适合你。

如果您真的想要,可以将app.add_url_rule移到主要区域之外。我不知道为什么你会这样做。第一个例子是要走的路。

请注意,app.run()已正确放置在主块内,即使您要使用第二个示例,也应保留在此处。

旁注:你的两条路线不一样。第一个是根路径上名为a的路由,第二个路径是根路径上名为index的路由。