【问题标题】:Flask_MongoEngine doesn't work on Webfaction?Flask_MongoEngine 不适用于 Webfaction?
【发布时间】:2015-04-21 17:11:48
【问题描述】:

我目前正在尝试将使用 Python Flask framework 构建的网站部署到 Webfaction。我已经部署了一个 MongoDB,我可以从 MongoDB 交互式解释器成功连接到它:

[celli@web498 ~]$ mongo localhost:18209/admin
MongoDB shell version: 3.0.2
connecting to: localhost:18209/admin
> db.auth("awesomeusername", "anawesomepassword")
1

启动网站时,它可以使用我的烧瓶 config.py 文件中的这些凭据成功连接:

MONGODB_SETTINGS = { 'db': 'tc', “端口”:18209,
'用户名':'真棒用户名', '密码': 'anawesomepassword', }

但是当我访问执行查询的页面时,我收到以下错误。此代码在另一台服务器上运行良好,因此错误出在我的 MongoDB 实例的设置或与它的连接中。我也觉得奇怪的是设置连接工作正常,但查询它会产生这个Authentication failed 错误。

知道如何解决这个问题吗?欢迎所有提示!

File "/home/celli/webapps/tc/venv/lib/python2.7/site-packages/flask_login.py", line 758, in decorated_view
 return func(*args, **kwargs)
File "/home/celli/webapps/tc/tc/app/views/webviews.py", line 220, in myTickets
 userDocs = UserDocument.objects(id__in=[ticket.doc_id for ticket in userTickets])
File "/home/celli/webapps/tc/venv/lib/python2.7/site-packages/mongoengine/queryset/manager.py", line 37, in __get__
 queryset = queryset_class(owner, owner._get_collection())
File "/home/celli/webapps/tc/venv/lib/python2.7/site-packages/mongoengine/document.py", line 168, in _get_collection
 db = cls._get_db()
File "/home/celli/webapps/tc/venv/lib/python2.7/site-packages/mongoengine/document.py", line 162, in _get_db
 return get_db(cls._meta.get("db_alias", DEFAULT_CONNECTION_NAME))
File "/home/celli/webapps/tc/venv/lib/python2.7/site-packages/mongoengine/connection.py", line 143, in get_db
 source=conn_settings['authentication_source'])
File "/home/celli/webapps/tc/venv/lib/python2.7/site-packages/pymongo/database.py", line 978, in authenticate
 self.connection._cache_credentials(self.name, credentials)
File "/home/celli/webapps/tc/venv/lib/python2.7/site-packages/pymongo/mongo_client.py", line 467, in _cache_credentials
 auth.authenticate(credentials, sock_info, self.__simple_command)
File "/home/celli/webapps/tc/venv/lib/python2.7/site-packages/pymongo/auth.py", line 475, in authenticate
 auth_func(credentials[1:], sock_info, cmd_func)
File "/home/celli/webapps/tc/venv/lib/python2.7/site-packages/pymongo/auth.py", line 450, in _authenticate_default
 return _authenticate_scram_sha1(credentials, sock_info, cmd_func)
File "/home/celli/webapps/tc/venv/lib/python2.7/site-packages/pymongo/auth.py", line 238, in _authenticate_scram_sha1
 sasl_start, sasl_continue)
File "/home/celli/webapps/tc/venv/lib/python2.7/site-packages/pymongo/auth.py", line 185, in _scram_sha1_conversation
 res, _ = cmd_func(sock_info, source, sasl_start)
File "/home/celli/webapps/tc/venv/lib/python2.7/site-packages/pymongo/mongo_client.py", line 703, in __simple_command
 helpers._check_command_response(response, None, msg)
File "/home/celli/webapps/tc/venv/lib/python2.7/site-packages/pymongo/helpers.py", line 182, in _check_command_response
 raise OperationFailure(msg % errmsg, code, response)
OperationFailure: command SON([('saslStart', 1), ('mechanism', 'SCRAM-SHA-1'), ('autoAuthorize', 1), ('payload', Binary('n,,n=awesomeusername,r=NjAxNTEwMjc5MzAy', 0))]) on namespace tc.$cmd failed: Authentication failed.

【问题讨论】:

  • 我认为 MongoDB 在建立连接时不会进行身份验证,只有在您查询数据库时才会进行身份验证

标签: python mongodb mongoengine webfaction


【解决方案1】:

MongoDB's users are per-database。在您的示例中,您显示您连接到 admin 数据库,但错误消息只是告诉您您的用户正在尝试使用 tc 数据库进行身份验证。可能您的用户在tc 上没有角色。

(另一种可能是tc 不是您要连接的数据库;您需要在连接参数/字符串中指定正确的数据库名称)。

【讨论】:

    猜你喜欢
    • 2017-05-13
    • 1970-01-01
    • 2018-01-13
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多