[英]Flask and Gunicorn on Heroku import error
我有一個使用 MongoEngine 的小型 Flask 應用程序。
我的項目結構:
/myproject
-application.py
-config.py
/my_app
-models.py
-views.py
我的應用程序.py:
#!/usr/bin/env python
from flask.ext.mongoengine import MongoEngine
from config import app
import os
app.debug = True
# get config settings
if __name__ == '__main__':
app.config.from_object('config')
else:
app.config.from_object('heroku_config')
# wrap app in mongengine
db = MongoEngine(app)
if __name__ == '__main__':
# Bind to PORT if defined, otherwise default to 5000.
port = int(os.environ.get('PORT', 5000))
app.run(host='0.0.0.0', port=port)
我的模型.py:
from application import db
from flask import url_for
# declare model classes
...
我正在 Heroku 上部署。 如果我的 Procfile 顯示:
web: python application.py
它工作正常。 當我嘗試切換到 Gunicorn 時:
web: gunicorn application:app
當我啟動 gunicorn 時,它通過導入錯誤的方式抱怨:
ImportError: cannot import name db
為什么現在會出現這個問題? 我猜這是一個路徑問題,但我不明白為什么會這樣。
我假設您正在 application.py 中注冊藍圖或類似的東西,然后導入模型,對嗎?
您沒有提供視圖文件或您如何使用視圖文件,如果我的猜測不正確,我下面的答案也不會正確。
如果我的猜測是正確的,那可能是因為循環導入。 您可以創建一個包含這些行的 db.py 文件(從 application.py 移動):
from flask.ext.mongoengine import MongoEngine
db = MongoEngine(app)
然后將該文件導入您的模型( from db import db
)。
這意味着流程看起來像這樣: db -> model -> view -> app
而不是app (db) -> model -> view -> app
。
循環導入會產生各種煩人的問題,請盡可能避免它們。
如果您使用的是init風格的燒瓶模塊,那么以下工作(源自托盤燒瓶教程 v Flask 2.0.1)。 https://www.palletsprojects.com/p/flask/
web: env FLASK_APP=flaskr gunicorn -b '0.0.0.0':${PORT} 'flaskr:create_app()'
其中 create_app 是從 flaskr/ init .py 調用的“應用程序”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.