При использовании Django -RQ модельный запрос работает только при втором запуске. - PullRequest
1 голос
/ 01 августа 2020

Использование Django-RQ (v2.3.0) запроса к базе данных (PostgreSQL) работает, только если сделано дважды. Это настройка:

models.py:

class AnalysisResult(models.Model):
    user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
    public_id = models.UUIDField(unique=True, default=uuid.uuid4, editable=False)

tasks.py:

@job(os.getenv("REDIS_QUEUE_NAME", "default"))
def update_progress_in_db(result_id: UUID):
    # FIXME This query only works on the second try when we run this here inside the rqworker?!
    try:
        tmp_record = AnalysisResult.objects.get(public_id=result_id)
    except (AnalysisResult.DoesNotExist, AnalysisResult.MultipleObjectsReturned) as e:
        # Always getting the exception here!
        logger.error("Error retrieving tmp_record with id={}: {}.".format(result_id, e))
    except Exception as ex:
        logger.error("General error while retrieving tmp_record: {}".format(ex))

    try:
        record = AnalysisResult.objects.get(public_id=result_id)
        logger.debug("result record: {}".format(record)) # Working fine.
    except (AnalysisResult.DoesNotExist, AnalysisResult.MultipleObjectsReturned) as e:
        # Never getting this exception.
        logger.error("Error updating progress status with id={}: {}.".format(result_id, e))
    except Exception as ex:
        logger.error("General error while updating progress status: {}".format(ex))

Запуск AnalysisResult.objects.get(public_id=result_id) в django-admin shell всегда отлично работает на первая попытка. И мне бы очень хотелось не использовать описанный выше обходной путь, пытаясь дважды запросить запись. Он просто кажется слишком грязным.

Указатели на то, что здесь может отсутствовать, приветствуются.

...