2013-03-27 81 views
5

嗨我有一個小瓶應用程序,我正在部署到heroku。燒瓶mongoengine通過uri連接

我的本地配置是這樣的:

from flask import Flask 
from flask.ext.mongoengine import MongoEngine 

app = Flask(__name__) 
app.debug = True 
app.config["MONGODB_SETTINGS"] = {'DB': "my_app"} 
app.config["SECRET_KEY"] = "secretpassword" 

db = MongoEngine(app) 

所以,我知道我需要配置該應用使用連接的蒙戈URI法,我有我的聯繫方式:

mongodb://<user>:<password>@alex.mongohq.com:10043/app12345678 

我只是有點卡住修改我的應用程序連接通過URI的語法。

任何幫助將不勝感激。

回答

5

所以我得到它的工作(最後):

from flask import Flask 
from mongoengine import connect 

app = Flask(__name__) 

app.config["MONGODB_DB"] = 'app12345678' 
connect(
    'app12345678', 
    username='heroku', 
    password='a614e68b445d0d9d1c375740781073b4', 
    host='mongodb://<user>:<password>@alex.mongohq.com:10043/app12345678', 
    port=10043 
) 

雖然我預計,其他各種配置將正常工作。

+0

用戶名和密碼從何而來? – 2013-08-03 21:30:25

+0

用戶名/密碼來自您的mongohq賬戶: 創建一個免費的沙箱賬戶,並在數據庫 - >管理 - >用戶爲數據庫創建一個用戶名/密碼。然後在Databases-> Collections下點擊'直接連接到你的數據庫',並且首先嚐試mongo命令。然後將用戶/密碼和應用信息複製到此處發佈的解決方案。 – antimatter 2014-04-14 22:23:18

+0

如果你仍然有興趣讓MongoEngine包裝類工作,請參閱我的回覆:) – antimatter 2014-04-15 00:07:37

3

當你看flask-mongoengine code,你可以看到什麼配置變量可用

所以這應該工作:

app.config["MONGODB_HOST"] = 'alex.mongohq.com/app12345678' 
app.config["MONGODB_PORT"] = 10043 
app.config["MONGODB_DATABASE"] = 'dbname' 
app.config["MONGODB_USERNAME"] = 'user' 
app.config["MONGODB_PASSWORD"] = 'password' 
db = MongoEngine(app) 

我不知道,如果app123是應用程序或數據庫名稱。你可能需要稍微擺弄才能獲得連接。我與Heroku上的Mongokit + MongoLab有同樣的問題:)

也可以使用這樣的URI。

app.config["MONGODB_SETTINGS"] = {'DB': "my_app", "host":'mongodb://<user>:<password>@alex.mongohq.com:10043/app12345678'} 

其實我也沒辦法,在什麼點「MONGODB_SETTINGS」讀,但它似乎工作,當我在shell試了一下。

+0

我想'的app.config [ 「MONGODB_SETTINGS」] = {「DB」:'app12345678','host':'mongodb:// @ alex.mongohq.com:10043/app12345678'和各種衍生產品,但仍然沒有聯繫。 heroku給了我'MONGOHQ_URL'變量,所以當然這應該是我需要的一切? – 2013-03-27 22:45:07

0

我想通了如何使用flask.ext.mongoengine.MongoEngine包裝類要做到這一點,而不是mongoengine.connect()

from flask import Flask 
from flask.ext.mongoengine import MongoEngine 

app = Flask(__name__) 

HOST = '<hostname>' # ex: 'oceanic.mongohq.com' 
db_settings = { 
    'MONGODB_DB': '<database>', 
    'MONGODB_USERNAME': '<username>', 
    'MONGODB_PASSWORD': '<password>', 
    'MONGODB_PORT': <port>, 
} 
app.config = dict(list(app.config.items()) + list(db_settings.items())) 
app.config["MONGODB_HOST"] = ('mongodb://%(MONGODB_USERNAME)s:%(MONGODB_PASSWORD)[email protected]'+ 
           HOST +':%(MONGODB_PORT)s/%(MONGODB_DB)s') % db_settings 

db = MongoEngine(app) 

if __name__ == '__main__': 
    app.run() 

如果您使用mongohq,app.config["MONGODB_HOST"]應在數據庫 - >管理 - >概述匹配蒙戈URI。

然後,您可以使用此設置來寫你的第一個應用程序稱爲的tumblelog遵循MongoDB的tumblelog tutorial

使用Python的俏皮對象自省(蟒蛇哦我怎麼你這樣),你可以看到MongoEngine包裝類是如何實現這一點:

from flask.ext.mongoengine import MongoEngine 
import inspect 
print(inspect.getsource(MongoEngine)) 
    ... 
    conn_settings = { 
     'db': app.config.get('MONGODB_DB', None), 
     'username': app.config.get('MONGODB_USERNAME', None), 
     'password': app.config.get('MONGODB_PASSWORD', None), 
     'host': app.config.get('MONGODB_HOST', None), 
     'port': int(app.config.get('MONGODB_PORT', 0)) or None 
    } 
    ... 
    self.connection = mongoengine.connect(**conn_settings) 
    ... 
    self.app = app