【发布时间】:2021-10-03 10:15:02
【问题描述】:
Celery worker 和 beat 工作正常。
网站加载正常,除非我调用一个将任务传递给 Celery 的 url。
manage.py
#!/usr/bin/env python
import os
import sys
def main():
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ada.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
这是我的 WSGI 文件。
import os
import sys
import dotenv
from django.core.wsgi import get_wsgi_application
dotenv.load_dotenv()
def addpath(path):
if path not in sys.path:
sys.path.insert(0, path)
addpath('/opt/ada')
os.environ['DJANGO_SETTINGS_MODULE'] = 'ada.settings'
os.environ['PYTHONPATH'] = '/opt/ada'
os.environ['CELERY_LOADER'] = "django"
application = get_wsgi_application()
celery_config.py
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ada.settings')
app = Celery('ada')
app.config_from_object('django.conf:settings', namespace='')
app.autodiscover_tasks()
初始化.py
from __future__ import absolute_import, unicode_literals
from ada.celery_config import app as celery_app
__all__ = ('celery_app', )
我不明白这个错误。
mod_wsgi (pid=2547): Exception occurred processing WSGI script '/opt/ada/ada/wsgi.py'.
Traceback (most recent call last):
File "/opt/ada/venv/lib/python3.8/site-packages/kombu/utils/objects.py", line 42, in __get__
return obj.__dict__[self.__name__]
KeyError: 'tasks'
另外,我可以尝试从 shell 调用相同的任务,它可以工作。
该问题仅在调用必须与我的 apache2 站点 conf 文件、wsgi.py 或相关内容相关的 url 时出现
我错过了什么?
【问题讨论】:
-
您的
manage.py脚本看起来如何?你在那里做同样的准备工作吗? -
是的。如果 wsgi 不正确,其他与芹菜无关的任务会起作用吗?如果 wsgi 损坏,则无法正确加载。
-
你能分享
celery.py文件,你可以在其中实例化 celery 并设置配置等吗? -
我添加了 celery_config.py 和 init.py 供参考。
标签: python django redis celery