【问题标题】:Connecting to MongoHQ from heroku console (heroku run python)从 heroku 控制台连接到 MongoHQ (heroku run python)
【发布时间】:2012-08-23 13:49:00
【问题描述】:

尝试通过 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

我的适用代码

app/init.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)

app/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),只要将用户名和密码参数传递给连接或可从 URI 解析。我想不出一种方法来查看是否正在尝试登录并静默失败。

我尝试绕过 mongoengine 并使用 pymongo.Connection 并得到相同的结果。我尝试了使用 Connection 方法的所有几种模式。我创建了一个新的数据库用户,与 mongoHQ 为 heroku 的生产访问创建的用户不同 -> 相同。

这是一个烧瓶应用程序,但我认为没有任何应用程序代码被触及。

更新

我找到了解决方案,但它会引起一些头痛。我可以通过

手动连接到数据库
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 开箱即用。

【问题讨论】:

    标签: python mongodb heroku mongoengine mongohq


    【解决方案1】:

    请使用 URI 方式连接并通过host kwarg 传递信息 例如:

    connect("testdb_uri", host='mongodb://username:password@localhost/mongoenginetest')
    

    【讨论】:

      【解决方案2】:

      MongoHQ 插件使用密码哈希而不是实际密码,这可能是错误。

      您应该使用以下命令将环境变量MONGOHQ_URL 更改为真实密码:

      heroku config:set MONGOHQ_URL=mongodb://...

      设置后,您可以重新启动您的应用程序 (heroku apps),以便获取更改。如果您在失败的应用程序的目录中,config:seting 配置变量将重新启动应用程序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-22
        • 2016-02-10
        • 2011-11-26
        • 2012-12-22
        • 2013-10-04
        • 1970-01-01
        • 2012-02-22
        • 2011-10-21
        相关资源
        最近更新 更多