Heroku の Python コンソールを介して MongoHQ データベースとやり取りしようとすると、「ログインが必要です」というエラーが表示されます。
...
File "/app/.heroku/venv/lib/python2.7/site-packages/pymongo/helpers.py", line 128, in _check_command_response
raise OperationFailure(msg % response["errmsg"])
pymongo.errors.OperationFailure: command SON([('listDatabases', 1)]) failed: need to login
私の適用コード
アプリ/初期化.py:
from mongoengine import connect
import settings
db = connect(settings.DB, host=settings.DB_HOST, port=settings.DB_PORT, username=settings.DB_USER, password=settings.DB_PASS)
アプリ/settings.py:
if 'MONGOHQ_URL' in os.environ:
url = urlparse(os.environ['MONGOHQ_URL'])
DB = url.path[1:]
DB_HOST = url.hostname
DB_PORT = url.port
DB_USER = url.username
DB_PASS = url.password
os.environ['MONGOHQ_URL'] は次のようになります:
'mongodb://[username]:[password]@[host]:[port]/[db-name]'
このコードは、ローカルでも heroku Web サーバーからでも機能します (mongodb に接続して読み書きできます)。
ドキュメント (http://www.mongodb.org/display/DOCS/Connections) によると、ユーザー名とパスワードのパラメーターが Connection に渡されるか解析可能である限り、サーバーへの接続で「ログイン」試行を行う必要があります。 URIから。ログイン試行が行われ、黙って失敗したかどうかを確認する方法が思いつきませんでした。
mongoengine をバイパスして pymongo.Connection を使用してみましたが、同じ結果が得られました。Connection メソッドを使用するいくつかのパターンをすべて試しました。herokuの本番アクセス用にmongoHQが作成するものとは異なる、新しいデータベースユーザーを作成しました->同じです。
フラスコアプリですが、アプリのコードは一切手を加えていないと思います。
アップデート
解決策を見つけましたが、頭痛の種になります。データベースに手動で接続できます
conn = connect(settings.DB, host=settings.DB_HOST, port=settings.DB_PORT, username=settings.DB_USER, password=settings.DB_PASS)
db = conn[settings.DB]
db.authenticate(settings.DB_USER, settings.DB_PASS)
アップデート #2
Mongolab はすぐに使えるようになりました。