首页 > 解决方案 > Mongodb 和 Celery “pymongo.errors.OperationFailure:命令 createIndexes 需要身份验证”

问题描述

我正在使用 Mongodb(作为后端和代理)使用 Celery。我按照本教程了解如何设置它们:https ://skillachie.com/2013/06/15/intro-celery-and-mongodb/

当我在 /etc/mongod.conf 文件上启用安全性时,如下所示:

security:
    authorization: enabled

我调用 .get() 来获取我设置的任务的结果我收到了这个错误:

   Traceback (most recent call last):
  File "/home/celeryProject/celeryProject/lib/python3.6/site-packages/kombu/utils/__init__.py", line 323, in __get__
    return obj.__dict__[self.__name__]
KeyError: 'collection'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/celeryProject/celeryProject/lib/python3.6/site-packages/celery/result.py", line 169, in get
    no_ack=no_ack,
  File "/home/celeryProject/celeryProject/lib/python3.6/site-packages/celery/backends/base.py", line 229, in wait_for
    meta = self.get_task_meta(task_id)
  File "/home/celeryProject/celeryProject/lib/python3.6/site-packages/celery/backends/base.py", line 307, in get_task_meta
    meta = self._get_task_meta_for(task_id)
  File "/home/celeryProject/celeryProject/lib/python3.6/site-packages/celery/backends/mongodb.py", line 158, in _get_task_meta_for
    obj = self.collection.find_one({'_id': task_id})
  File "/home/celeryProject/celeryProject/lib/python3.6/site-packages/kombu/utils/__init__.py", line 325, in __get__
    value = obj.__dict__[self.__name__] = self.__get(obj)
  File "/home/celeryProject/celeryProject/lib/python3.6/site-packages/celery/backends/mongodb.py", line 246, in collection
    collection.ensure_index('date_done', background='true')
  File "/home/celeryProject/celeryProject/lib/python3.6/site-packages/pymongo/collection.py", line 2028, in ensure_index
    self.__create_index(keys, kwargs, session=None)
  File "/home/celeryProject/celeryProject/lib/python3.6/site-packages/pymongo/collection.py", line 1894, in __create_index
    session=session)
  File "/home/celeryProject/celeryProject/lib/python3.6/site-packages/pymongo/collection.py", line 250, in _command
    user_fields=user_fields)
  File "/home/celeryProject/celeryProject/lib/python3.6/site-packages/pymongo/pool.py", line 613, in command
    user_fields=user_fields)
  File "/home/celeryProject/celeryProject/lib/python3.6/site-packages/pymongo/network.py", line 167, in command
    parse_write_concern_error=parse_write_concern_error)
  File "/home/celeryProject/celeryProject/lib/python3.6/site-packages/pymongo/helpers.py", line 159, in _check_command_response
    raise OperationFailure(msg % errmsg, code, response)
pymongo.errors.OperationFailure: command createIndexes requires authentication

但是当我禁用安全性时,它正在工作!

我还尝试在 mongodb 上更改用户的角色,但什么也没发生。

另外,我试图用这种方式登录:

BROKER_URL = 'mongodb://tester:123456@178.128.250.181:27017/test?authSource=admin'

celery = Celery('EOD_TASKS',broker=BROKER_URL)

这是一个安全问题还是我可以忽略它并继续前进?

标签: pythonmongodbcelery

解决方案


如果我没记错的话, usingauthorization: enabled意味着您需要设置用户/密码才能登录以查询 mongodb。默认情况下,它是敞开的,这是出于安全考虑


推荐阅读