【问题标题】:Can't connect to MongoDB after upgrading?升级后无法连接MongoDB?
【发布时间】:2015-06-19 17:16:36
【问题描述】:

我正在使用 Flask 构建一个网站,其中我使用 MongoDB 和 MongoEngine ORM。为了重新开始,我现在升级了我的 ubuntu 14.04 开发机器上的所有 apt 和 pip 包。不幸的是,这中断了我与 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]
>

我没有对代码或密码或类似的东西进行任何更改。我重新启动并重新启动了 mongoDB,但没有任何效果。我的设置是这样的:

MONGODB_SETTINGS = {
    'db': 'mydatabasename'
}

我像这样实例化连接(以前有效):

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

由于我没有真正改变任何东西,我有点不确定在哪里寻找解决方案。有没有人有任何提示我可以解决这个问题?

[编辑] 有了@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'

【问题讨论】:

  • 你有哪个版本的pymongo,你现在有哪个版本?

标签: python mongodb flask mongoengine flask-mongoengine


【解决方案1】:

看起来你已经安装了 pymongo 3.0。

Mongoengine 尚不兼容。

你可以尝试解决这个问题

pip uninstall pymongo
pip install pymongo==2.8

【讨论】:

    【解决方案2】:

    看起来您的默认 read_preference 值为 False,试试这个,添加到您的导入中:

    from pymongo import read_preferences
    

    这是你的 mongo 配置字典:

    'read_preference': read_preferences.ReadPreference.PRIMARY
    

    【讨论】:

    • 谢谢!它现在可以正确启动!不幸的是,查询仍然不起作用。我在最初的问题中添加了一个堆栈跟踪。知道如何让查询再次工作吗?
    • 您要执行哪个查询?
    • 我正在尝试做一个非常基本的UserDocument.objects(id=docId).first()。请参阅我最初问题末尾的堆栈跟踪。
    • 因为我想重新开始,所以我从这个 SO 答案中得到了一个提示,将 pymongo 从 3.0 版降级到 2.8 版,这暂时“解决了”这个问题。我仍然想知道为什么 pymongo 3.0 有这个问题。
    • 看起来 pymongo 有问题,这里的人也有类似的问题 github.com/MongoEngine/mongoengine/issues/935
    【解决方案3】:

    如果使用 monogengine >= 3 和 python >=3 和 Ubuntu
    from pymongo import read_preferences 在/usr/local/lib/python3.5/dist-packages/mongoengine/

    并在与sudo gedit connection.py 相同的目录中打开终端 并在 def register_connection 代替 'read_preference': read_preferences.ReadPreference.PRIMARY 在函数的参数中 它的作用就像魅力

    【讨论】:

      猜你喜欢
      • 2013-10-28
      • 1970-01-01
      • 2016-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      • 2017-01-10
      相关资源
      最近更新 更多