Flask与gunicorn,多模块:循环导入 - 并非所有路由可访问
我的问题和Flask和Gunicorn在Heroku上的导入错误以及Procfile自定义模块名称有点类似,但我用他们的解决方案还是没法解决我的问题。
我的Flask应用程序结构如下:
appname/
run.py
Procfile
venv/
...
appname/
app.py
views.py
run.py:
from appname import app
app.run(debug=True)
app.py:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return "here"
Procfile:
web: gunicorn --pythonpath appname app:app
views.py:
from appname import app
from flask import render_template
@app.route('/there')
def there():
return "there"
之前,我在运行foreman start
时遇到了一些错误,但当我从app.py
中删除import appname.views
后,这些错误就消失了。
现在,foreman start
可以正常运行应用程序,根路径/
可以访问,但/there
却无法访问。这是为什么呢?
2 个回答
1
我找到了一些方法来绕过这个问题,具体做法是:
- 除了在
run.py
文件里,其他地方都不使用from appname import app
- 因此,只在
app.py
文件里定义路由
我其实更希望把我的路由和模块放在一起,不过我不太确定哪种写法在Python中更好。
4
太好了!我终于能用我想要的代码让它正常工作了。
应用结构(没有改变):
appname/
run.py
Procfile
venv/
...
appname/
app.py
views.py
run.py(没有改变):
from appname import app
app.run(debug=True)
app.py:
from flask import Flask
app = Flask(__name__)
import appname.views
import appname.anothermodule
Procfile:
web: gunicorn appname:app
views.py(没有改变):
from appname import app
@app.route('/')
def home():
return "Hello, awesomeness!"