Module 'myproject' has no attribute 'celery'` 错误时

197 阅读2分钟

遇到 Error: Invalid value for '-A' / '--app': Unable to load celery application. Module 'myproject' has no attribute 'celery' 错误时,表示 Celery 无法找到或加载你的 Celery 应用程序。这个问题通常是因为 Celery 配置文件或模块导入不正确。下面是一些解决方法来确保 Celery 正确配置并能够找到你的应用程序:

1. 检查 celery.py 配置

确保 myproject/celery.py 文件存在且正确配置。以下是一个标准的 celery.py 文件示例:

# myproject/celery.py
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

# 设置 Django 默认配置模块
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')

app = Celery('myproject')

# 从 Django 配置文件中加载 Celery 配置
app.config_from_object('django.conf:settings', namespace='CELERY')

# 自动发现任务模块
app.autodiscover_tasks()

2. 确保 __init__.py 正确

确保 myproject/__init__.py 文件中包含了 Celery 应用程序的导入:

# myproject/__init__.py
from __future__ import absolute_import, unicode_literals

# 确保 Celery 应用程序在 Django 启动时自动加载
from .celery import app as celery_app

__all__ = ('celery_app',)

3. 启动 Celery Worker 时使用正确的模块

确保你在启动 Celery worker 时指定的模块路径正确。以下是启动 Celery worker 的标准命令:

celery -A myproject worker --loglevel=info

确保 myproject 是 Django 项目名称,并且 myproject 目录下存在 celery.py 文件。

4. 检查 Python 模块路径

确保你的 Python 模块路径正确配置。如果在虚拟环境中工作,确保虚拟环境已经激活,并且 Python 路径包含了项目目录。

5. 验证 Django 设置

确保 Django settings.py 文件中包含了 Celery 的配置,例如:

# myproject/settings.py
CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'

6. 检查 Celery 版本

有时 Celery 的版本问题也可能导致兼容性问题。确保使用的 Celery 版本与 Django 和其他依赖项兼容。可以查看 Celery 的版本:

pip show celery

7. 查看 Celery 帮助

如果仍然遇到问题,可以查看 Celery 的帮助信息以确保命令格式正确:

celery --help

总结

  • 确保 celery.py 文件存在且配置正确。
  • 确保 __init__.py 文件中正确导入了 Celery 应用。
  • 确保启动 Celery worker 时使用正确的模块路径。
  • 确保 Python 模块路径正确,虚拟环境已激活。
  • 验证 Django 设置中的 Celery 配置。
  • 检查 Celery 版本和兼容性问题。