【发布时间】:2021-09-11 10:18:08
【问题描述】:
我有这样的文件结构:
- 我的应用程序
- 艺术家_应用程序
- tasks.py
- 任务
- celery.py
- 艺术家_应用程序
# settings.py
INSTALLED_APPS = [
'myapp.artist_application',
...
# celery.py
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myapp.settings.production')
app = Celery("tasks")
app.config_from_object('django.conf:settings', namespace="CELERY")
app.autodiscover_tasks()
# tasks.py
from tasks.celery import app as celery_myapp
from django.apps import apps
from django.conf import settings
import requests
@celery_esns.task(name='sample_task')
def sample_task():
print('TESTING CELERY')
@celery_esns.task(name='publish_artist_task')
def publish_artist_task(payload, artist_id):
r = requests.post(settings.PUBLISH_URL, json = payload)
if r.status_code == 200:
apps.get_model('artist_application', 'Artist').objects.filter(unique_id=artist_id).update(published=True)
else:
raise Exception("Error publishing artist with id: " + artist_id)
当我用以下方式启动 Celery 时,一切都运行良好:
celery -A myapp.tasks worker -Q celery -l info
但在生产中我运行命令(在 virtualenv 中),我得到了错误:
django.core.exceptions.ImproperlyConfigured: Cannot import 'artist_application'. Check that 'myapp.artist_application.apps.ArtistApplication.name' is correct.
任何想法去哪里看?我不明白“runserver”加载应用程序的方式与 wsgi 有何不同?
【问题讨论】:
-
尝试将 Artist 模型直接导入您的 tasks.py 并更新。如果您的 publish_artist_task 函数被调用。
标签: django django-celery