2013-04-25 50 views
1

嗨,我有一個使用MongoEngine的小燒瓶應用程序。Heroku上的燒瓶和Gunicorn導入錯誤

我的項目結構:

/myproject 
    -application.py 
    -config.py 
    /my_app 
    -models.py 
    -views.py 

我application.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) 

我的models.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 

爲什麼這是一個問題呢?我猜這是一個路徑問題,但我看不出爲什麼如此。

任何幫助將不勝感激。

回答

0

我假設你正在註冊藍圖或類似於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

循環進口產生各種令人討厭的問題,儘量避免它們。