Сельдерей бьется и неправильно работает с Django orm

#django #celery #django-orm #celerybeat

Вопрос:

Я настроил celery и celery beat в Django, и они работают правильно, за исключением одной проблемы,

Когда celery beat берет мою задачу и передает ее работнику сельдерея, мой запрос внутри задачи не дает результата, но когда я проверяю его сам, он дает результаты, ниже приведена моя задача:

 @shared_task
def remove_expired_pending_task():
    call_command("remove_pending")
 

а ниже приведен метод дескриптора команды «remove_pending» :

 def handle(self, *args, **options):
    try:
        aware = pytz.timezone("Asia/Tehran")

        min_date = aware.localize(jdatetime.datetime.now() - jdatetime.timedelta(hours=7))
        max_date = aware.localize(jdatetime.datetime.now()   jdatetime.timedelta(hours=7))
        q = Payment.objects.filter(
            is_completed=False,
            date__range=(min_date, max_date)
        )
        c = q.count()
        q.delete()

        self.stdout.write(
            f"{c} pending Payament deleted between
                 {min_date.strftime('%Y/%m/%d %H-%M-%S')} | 
                     {max_date.strftime('%Y/%m/%d %H-%M-%S')}")
    except Exception as exc:
        self.stderr.write(
            f"Exception happend in 'Remove pendings'n: {exc}")
 

и в celery.py файл после объявления приложения сельдерей я добавил это:

 @app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
    
    sender.add_periodic_task(1000.0, remove_expired_pending_task.s(), name='remove_expired_pendings')
 

как я уже говорил, сельдерей находит и выполняет задачу, но запрос возвращает пустой набор запросов,
но когда я запускаю:

 python manage.py remove_pending
 

ИЗМЕНИТЬ
конфигурацию базы данных-это:

 DATABASES = {
    "default": {
        "ENGINE": os.environ.get("SQL_ENGINE", "django.db.backends.postgresql_psycopg2"),
        "NAME": os.environ.get("SQL_DATABASE", "something"),
        "USER": os.environ.get("SQL_USER", "something"),
        "PASSWORD": os.environ.get("SQL_PASSWORD", "somethingpassword"),
        "HOST": os.environ.get("SQL_HOST", "localhost"),
        "PORT": os.environ.get("SQL_PORT", "5432"),
    }
 

Это работает, и набор запросов не пуст, и они успешно удаляются.
вы знаете, почему это происходит?

Спасибо.

Комментарии:

1. Какова ваша конфигурация БД?

2. @IainShelvington привет, я добавил конфигурацию БД, о которой идет речь.

3. Возможно ли, что ваш процесс сельдерея имеет другие переменные среды и подключается к другой базе данных?

4. @IainShelvington о, хороший вопрос, я проверю его и сообщу вам о результате. Спасибо

5. @IainShelvington спасибо, сэр, вот и все, объект сельдерей был создан с настройками разработки, поэтому он использует базу данных разработки sqlite3, но Django использует производственные настройки и постгрейсы. еще раз спасибо