gpt4 book ai didi

python - 从heroku控制台连接到MongoHQ(heroku run python)

转载 作者:行者123 更新时间:2023-12-01 05:56:43 25 4
gpt4 key购买 nike

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

应用程序/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 并得到相同的结果。我尝试了使用连接方法的所有几种模式。我创建了一个新的数据库用户,与 mongoHQ 为 heroku 的生产访问创建的用户不同 -> 相同。

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

更新

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

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

最佳答案

请使用URI方法进行连接,并通过host kwarg传递信息,例如:

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

关于python - 从heroku控制台连接到MongoHQ(heroku run python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12169673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com