2012-10-20 48 views
6

我在與MongoHQ Heroku的插件的麻煩。本地我的應用程序工作和OS變量是存在和良好的Heroku。但是,當我嘗試訪問數據庫時,它會引發錯誤:OperationFailure: database error: unauthorized db:my_database ns:my_database.cars lock type:0 client:128.62.187.133。如果我嘗試從MongoHQ硬編碼連接字符串並在本地運行,我會得到相同的錯誤。Heroku的MongoHQ插件和PyMongo - OperationFailure:數據庫錯誤:未經授權

我的應用低於:

import os 
import datetime 
from flask import Flask 
from flask import g 
from flask import jsonify 
from flask import json 
from flask import request 
from flask import url_for 
from flask import redirect 
from flask import render_template 
from flask import make_response 
import pymongo 
from pymongo import Connection 
from bson import BSON 
from bson import json_util 

app = Flask(__name__) 
def mongo_conn(): 
    # Format: MONGOHQ_URL: mongodb://<user>:<pass>@<base_url>:<port>/<url_path> 
    if os.environ.get('MONGOHQ_URL'): 
     return Connection(os.environ['MONGOHQ_URL']) 
    else: 
     return Connection() 


@app.route('/', methods=['GET', 'POST']) 
def hello(): 
    # Get your DB 
    connection = mongo_conn() 

    db = connection.my_database 

    # Create an object 
    car = {"brand": "Ford", 
      "model": "Mustang", 
      "date": datetime.datetime.utcnow()} 

    # Get your collection 
    cars = db.cars # crashes 
    # Insert it 
    cars.insert(car) 
    ... 

編輯:MongoHQ支持幫助我。問題在於我打電話給我的數據庫my_database而不是MongoHQ插件給我的實際數據庫名稱。例如,db = connection.app52314314。這個改變解決了它。

回答

3

您可能需要對數據庫運行authenticate命令你直接連接後。

嘗試這樣:

db.authenticate([USER], [PASSWORD]) 

如果不工作,隨時以電子郵件[email protected],我們可以幫助您與您的特定數據庫。

+0

不,當我插入的'db.authenticate(...)同樣的問題'後立即調用'DB = connection.my_database' –

+0

我給你發了郵件。 –

+1

通過電子郵件回覆。解決方案是將數據庫命名爲MongoHQ db。請參閱編輯獲得完整答案。 –

1

你並不需要做的一切。你可以簡單:

from pymongo import MongoClient 

client = MongoClient(os.environ['MONGOHQ_URL']) 
mongo_db = client.get_default_database() 

它會自動驗證您的身份,並連接到數據庫的供應,你的連接網址的<url_path>一部分。

相關問題