python - 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)
这是一个安全问题还是我可以忽略它并继续前进?
解决方案
如果我没记错的话, usingauthorization: enabled
意味着您需要设置用户/密码才能登录以查询 mongodb。默认情况下,它是敞开的,这是出于安全考虑
推荐阅读
- datatables - 数据表使用 ajax 对象数据源自动获取列结构
- java - 在显示时调整列的大小 - NatTable
- vue.js - 将请求表单数据(图像)转换为字节
- python - 如何并行使用分页 API?
- jmeter - Jmeter 发送电子邮件以模拟 cjsm(安全)不使用 Base64 编码作为附件
- python - 为什么python与wireshark捕获的数据包之间存在很大差异
- css - PDFreactor text-decoration-color:如何对线进行着色?
- ionic4 - 从 google fit API 获取当前登录的用户信息(电子邮件或用户 ID)
- python - 没有名为站点 OSGEO4W 的模块
- cucumber-serenity - 如何将 serenity 测试结果导入 XRay 测试执行?