2015-04-14 3 views
2

Я создаю сайт с использованием Flask, в котором я использую MongoDB с ORM MongoEngine. Чтобы начать новый старт, я теперь обновил все apt и pip пакеты на моей машине разработки Ubuntu 14.04. К сожалению, это сломал мое подключение к MongoDB:Не удается подключиться к MongoDB после обновления?

Traceback (most recent call last): 
    File "./run.py", line 4, in <module> 
    from app import app, socketio 
    File "/home/kr65/beta/app/__init__.py", line 21, in <module> 
    mongoDb = MongoEngine(app) 
    File "/usr/local/lib/python2.7/dist-packages/flask_mongoengine/__init__.py", line 33, in __init__ 
    self.init_app(app) 
    File "/usr/local/lib/python2.7/dist-packages/flask_mongoengine/__init__.py", line 66, in init_app 
    self.connection = mongoengine.connect(**conn_settings) 
    File "/usr/local/lib/python2.7/dist-packages/mongoengine/connection.py", line 164, in connect 
    return get_connection(alias) 
    File "/usr/local/lib/python2.7/dist-packages/mongoengine/connection.py", line 126, in get_connection 
    raise ConnectionError("Cannot connect to database %s :\n%s" % (alias, e)) 
mongoengine.connection.ConnectionError: Cannot connect to database default : 
False is not a read preference. 

я проверил, если MongoDB составляет:

$ sudo service mongodb status 
mongodb start/running, process 781 

и если бы я мог получить в интерактивной командной строке:

$ mongo 
MongoDB shell version: 2.4.9 
connecting to: test 
Welcome to the MongoDB shell. 
For interactive help, type "help". 
For more comprehensive documentation, see 
    http://docs.mongodb.org/ 
Questions? Try the support group 
    http://groups.google.com/group/mongodb-user 
Server has startup warnings: 
Tue Apr 14 09:14:10.267 [initandlisten] 
Tue Apr 14 09:14:10.267 [initandlisten] ** WARNING: You are running in OpenVZ. This is known to be broken!!! 
Tue Apr 14 09:14:10.267 [initandlisten] 
> 

Я Ждут» t что-либо изменить код или пароли или что-то в этом роде. Я перезагрузился и перезапустил mongoDB, но ничего не работает. Мои настройки так:

MONGODB_SETTINGS = { 
    'db': 'mydatabasename' 
} 

и я инстанцирует соединение вроде этого (который работал раньше):

app = Flask(__name__) 
app.config.from_object('config') 
mongoDb = MongoEngine(app) 

Поскольку я не реально изменить что-либо, я вроде не знаете, куда искать решение. Есть ли у кого-нибудь советы, как я могу это решить?

[EDIT] С кончиком @lapinkoira мой MongoDB теперь запускается правильно, но теперь я получаю ошибку ниже при запросе. Любые идеи, как решить эту проблему?

File "/home/kr65/beta/app/views/webviews.py", line 476, in getDoc 
    userDoc = UserDocument.objects(id=docId).first() 
    File "/usr/local/lib/python2.7/dist-packages/mongoengine/queryset/base.py", line 309, in first 
    result = queryset[0] 
    File "/usr/local/lib/python2.7/dist-packages/mongoengine/queryset/base.py", line 160, in __getitem__ 
    return queryset._document._from_son(queryset._cursor[key], 
    File "/usr/local/lib/python2.7/dist-packages/mongoengine/queryset/base.py", line 1410, in _cursor 
    **self._cursor_args) 
    File "/usr/local/lib/python2.7/dist-packages/pymongo/collection.py", line 924, in find 
    return Cursor(self, *args, **kwargs) 
TypeError: __init__() got an unexpected keyword argument 'snapshot' 
+1

Какая версия pymongo у вас была и какая версия у вас есть сейчас? – lapinkoira

ответ

3

Похоже, ваше значение read_preference по умолчанию False, то попробуйте это, добавьте к вашему импорту:

from pymongo import read_preferences 

и это ваш Монго словарю конфигурации:

'read_preference': read_preferences.ReadPreference.PRIMARY 
+0

Спасибо за это! Теперь он запускается правильно! К сожалению, запрос по-прежнему не работает. Я добавил stacktrace к моему первоначальному вопросу. Любая идея, как я могу снова запросить работу? – kramer65

+0

Какой запрос вы пытаетесь выполнить? – lapinkoira

+0

Я пытаюсь сделать очень простой 'UserDocument.objects (id = docId) .first()'. Посмотрите на stacktrace в конце моего первоначального вопроса. – kramer65

6

выглядит как у вас есть Установлен pymongo 3.0.

Mongoengine еще не согласен с этим.

Вы можете попробовать исправить это

pip uninstall pymongo 
pip install pymongo==2.8 
0

При использовании monogengine> = 3 и питона> = 3 и Ubuntu
Написать from pymongo import read_preferences в /usr/local/lib/python3.5/dist-packages/mongoengine/

и открытый терминал в том же каталоге с sudo gedit connection.py и в защиту register_connection заменить 'read_preference': read_preferences.ReadPreference.PRIMARY в параметрах функции И это работает как шарм

Смежные вопросы