2013-03-27 74 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