遇到 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 版本和兼容性问题。