Skip to content

AppRegistryNotReady: Apps aren't loaded yet on calling a task #439

Closed
@GitRon

Description

@GitRon

Hi there!

Bug description

I just set up this backend for the first time and thought I made a mistake, because everytime I call a task via celery with

celery -A apps.config.celery_settings call myproject.tasks.my_task

I get this error:

File "/usr/local/lib/python3.12/site-packages/django_celery_results/backends/init.py", line 2, in
from .database import DatabaseBackend
File "/usr/local/lib/python3.12/site-packages/django_celery_results/backends/database.py", line 14, in
from ..models import ChordCounter
File "/usr/local/lib/python3.12/site-packages/django_celery_results/models.py", line 18, in
class TaskResult(models.Model):
File "/usr/local/lib/python3.12/site-packages/django/db/models/base.py", line 129, in new
app_config = apps.get_containing_app_config(module)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/django/apps/registry.py", line 260, in get_containing_app_config
self.check_apps_ready()
File "/usr/local/lib/python3.12/site-packages/django/apps/registry.py", line 138, in check_apps_ready
raise AppRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

After about 2 hours I tried to start the task programmatically via

python manage.py shell
from myproject.tasks import my_task
my_task.delay()

This works and the result gets stored in the backend.

Approaches

I tried this and this an this was there in the first place.

Celery settings

import os
from pathlib import Path
from typing import Final

import django
from celery import Celery
from celery.signals import beat_init, worker_ready, worker_shutdown
from django.conf import settings

from apps.config.celery.bootstraps import LivenessProbe

READINESS_FILE: Final[Path] = Path("/tmp/celery_ready")

# set the default Django settings module for the 'celery' program.
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "apps.config.settings")

# Setup celery
celery_app = Celery("portal", broker=settings.CELERY_BROKER_URL)

# Add liveness probe for k8s
celery_app.steps["worker"].add(LivenessProbe)

# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
celery_app.config_from_object("django.conf:settings", namespace="CELERY")

# Load task modules from all registered Django app configs.
celery_app.autodiscover_tasks()

# This will make sure the app is always imported when Django starts so that the celery decorator will use this app.
__all__ = ("celery_app", settings.CELERY_RETRY_DELAY, settings.CELERY_RETRY_MAX_TIMES)  # noqa: PLE0604


@beat_init.connect
def beat_ready(**_):
    READINESS_FILE.touch()


@worker_ready.connect
def worker_ready(**_):
    READINESS_FILE.touch()


@worker_shutdown.connect
def worker_shutdown(**_):
    READINESS_FILE.unlink(missing_ok=True)

I'm opening this issue because I think it seems to be a bug, right?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions