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

フラスコ モンゴエンジン コードを見ると、どのような構成変数が利用可能かがわかります。

したがって、これは機能するはずです:

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」がどの時点で読み取られるのか、実際にはわかりませんが、シェルで試してみると、うまくいくように見えました。

于 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"][データベース] -> [管理] -> [概要] の下の Mongo URI と一致する必要があります。

次に、この設定を使用してMongoDBtumblelog チュートリアルに従い、tumblelogという名前の最初のアプリを作成します。

Python の気の利いたオブジェクト イントロスペクション (python oh how I love you so) を使用すると、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 に答える