【问题标题】:Django Celery, App import error only on productionDjango Celery,应用程序导入错误仅在生产中
【发布时间】: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


【解决方案1】:

我必须将完整的虚线路径放在 apps.py 中

from django.apps import AppConfig

class ArtistApplicationConfig(AppConfig):
    name = 'myapp.artist_application'
    verbose_name = "Artist Application"

【讨论】:

    猜你喜欢
    • 2016-04-10
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 2013-02-16
    • 2017-08-04
    • 1970-01-01
    • 2011-04-30
    • 2023-03-28
    相关资源
    最近更新 更多