python - 为什么 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 时出现
我错过了什么?
解决方案
wsgi.py
从修复中删除以下行。
os.environ['CELERY_LOADER'] = "django"
我不知道它为什么起作用并且很想理解。
推荐阅读
- excel - 如何在组合框中获取可用页面大小列表并更改大小
- python-3.x - 根据频率删除列中的单词
- jquery - 从 Django 模型中使用 Ajax 获取模态数据
- java - 防止摆动动画跳跃
- node.js - express.js 和 request.js - 使用回调语法时不完整的 PDF 传输
- python - 如何使用 Python 阻止特定按键,例如 Alt + F4、Alt + Tab?
- r - 使用 S4 方法分派 S3 方法
- javascript - 从 HTML 表 JavaScript 推送
- javascript - 使用 await 时循环中断
- python - 使用不规则张量和 while 循环时,XLA 无法推断跨步切片的编译时间常数输出形状