【问题标题】:Why is my_task.delay() working from shell but not apache/wsgi为什么 my_task.delay() 从 shell 工作而不是 apache/wsgi
【发布时间】: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


【解决方案1】:

wsgi.py 中删除以下行可以解决问题。

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

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

【讨论】:

    猜你喜欢
    • 2021-11-01
    • 2022-01-10
    • 1970-01-01
    • 2015-08-01
    • 2010-09-30
    • 1970-01-01
    • 2015-12-28
    • 2017-11-19
    • 2013-07-01
    相关资源
    最近更新 更多