您好我有一个小瓶应用程序,我正在部署到heroku。
我的本地配置如下所示:
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)
所以,我知道我需要配置应用程序以使用mongo URI
连接方法,并且我有连接信息:
mongodb://<user>:<password>@alex.mongohq.com:10043/app12345678
我对修改我的应用以通过URI
进行连接的语法感到有点困惑。
非常感谢任何帮助。
答案 0 :(得分: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
)
虽然我预计其他各种配置都会有用。
答案 1 :(得分: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中尝试它时它似乎有效。
答案 2 :(得分: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)s@'+
HOST +':%(MONGODB_PORT)s/%(MONGODB_DB)s') % db_settings
db = MongoEngine(app)
if __name__ == '__main__':
app.run()
如果您使用的是mongohq,app.config["MONGODB_HOST"]
应与Databases-&gt; Admin-&gt;概述下的Mongo URI匹配。
然后,您可以使用此设置关注 MongoDB 的tumblelog tutorial来编写名为 tumblelog 的第一个应用。
使用python的漂亮对象内省(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