2015-04-21 1 views
0

В настоящее время я пытаюсь развернуть сайт, построенный с помощью Python Flask framework, до Webfaction. Я развернула MongoDB, к которому я могу успешно соединиться с MongoDB интерактивного интерпретатора:Flask_MongoEngine не работает на Webfaction?

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

При запуске веб-сайта, он может успешно подключиться, используя эти учетные данные в моем файле config.py колба:

MONGODB_SETTINGS = { 'дб': 'дц', 'порт': 18209,
'имя пользователя': 'awesomeusername', 'пароль': 'anawesomepassword', }

Но когда я посещаю страницу ВГ ich делает запрос, я получаю ошибку ниже. Этот код отлично работает на другом сервере, поэтому ошибка лежит где-то в настройке моего экземпляра 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. 
+0

Я не думаю, что MongoDB аутентифицируется при настройке соединения, только когда вы запрашиваете базу данных – nathancahill

ответ

0

MongoDB's users are per-database. В вашем примере показано, что вы подключаетесь к базе данных admin, но сообщение об ошибке просто сообщает вам, что ваш пользователь пытается выполнить аутентификацию с помощью базы данных tc. Вероятно, ваш пользователь не имеет роли на tc.

(Другая возможность заключается в том, что tc не является базой данных, к которой вы хотите подключиться, вам необходимо указать правильное имя базы данных в параметрах/строке соединения).