5

我有一个要部署到 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)

所以,我知道我需要将应用程序配置为使用 MongoURI连接方法,并且我有我的连接信息:

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

对于修改我的应用程序以通过URI.

4

3 回答 3

7

所以我让它工作(最后):

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
)

尽管我预计其他各种配置都可以使用。

于 2013-03-29T18:34:07.857 回答
6

查看flask-mongoengine 代码时,可以看到有哪些配置变量可用

所以这应该工作:

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 中尝试它时它似乎有效。

于 2013-03-27T22:00:29.260 回答
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->Admin->Overview 下的 Mongo URI。

然后,您可以按照MongoDBtumblelog 教程使用此设置编写您的第一个名为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
于 2014-04-15T00:05:13.450 回答