首页 > 解决方案 > 为什么 my_task.delay() 从 shell 工作而不是 apache/wsgi

问题描述

芹菜工人和节拍工作正常。

站点加载正常,除非我调用将任务传递给 Celery 的 url。

管理.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 时出现

我错过了什么?

标签: pythondjangorediscelery

解决方案


wsgi.py从修复中删除以下行。

os.environ['CELERY_LOADER'] = "django"

我不知道它为什么起作用并且很想理解。


推荐阅读