我在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。
答案 0 :(得分:2)
app.add_url_rule
行仅在您直接运行python脚本时执行。当您只导入脚本时(这就是gunicorn所做的那样),根本没有配置路由,任何请求都会产生404
。
这也解释了为什么两个版本在本地执行时都适合你。
如果您真的想要,可以将app.add_url_rule
移到主要区域之外。我不知道为什么你会这样做。第一个例子是要走的路。
请注意,app.run()
已正确放置在主块内,即使您要使用第二个示例,也应保留在此处。
旁注:你的两条路线不一样。第一个是根路径上名为a
的路由,第二个路径是根路径上名为index
的路由。