DjangoQ не работает в конвейере bitbucket

Я создаю запланированную задачу с помощью DjangoQ и для ее регистрации у меня есть такой код в моем apps.py: from django.apps import AppConfig

class ShiftsConfig(AppConfig):
    name = 'shifts'

    def ready(self):
        from django_q.models import Schedule

        func: str = 'path_to_func'
        schedule = Schedule.objects.filter(func=func).exists()
        if not schedule:
            Schedule.objects.create(func=func,
                                    hook='path_to_hook',
                                    schedule_type=Schedule.MINUTES,
                                    minutes=15,
                                    repeats=-1
                                    )

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

- step: &run-linter
    image: python:3.7
    name: Run linter
    caches:
      - pip
    script:
      - pip3 install -r requirements.txt
      - export DJANGO_SETTINGS_MODULE=main.settings
      - export DB_NAME=django
      - export DB_USER=django
      - export DB_PASS=django
      - export DB_POSTGRES_HOST=localhost
      - pylint ./* > pylint_report.txt
    artifacts:
      - pylint_report.txt
- step: &run-test
    name: Run Test
    caches:
      - pip
    script:
      - export DB_NAME=django
      - export DB_USER=django
      - export DB_PASS=django
      - export DB_POSTGRES_HOST=localhost
      - coverage erase
      - coverage run manage.py test
      - coverage xml -i
    services:
      - postgres
    artifacts:
      - coverage.xml

Но на шаге тестирования, когда я вызываю coverage run manage.py test я получаю:

Вышеуказанное исключение было непосредственной причиной следующего исключения: Traceback (последний последний вызов): Файл "manage.py", строка 17, in execute_from_command_line(sys.argv) File "/usr/local/lib/python3.8/dist-packages/django/core/management/init.py", строка 419, в execute_from_command_line utility.execute() Файл "/usr/local/lib/python3.8/dist-packages/django/core/management/init.py", строка 395, в execute django.setup() Файл "/usr/local/lib/python3.8/dist-packages/django/init.py", строка 24, в setup apps.populate(settings.INSTALLED_APPS) Файл "/usr/local/lib/python3.8/dist-packages/django/apps/registry.py", строка 122, in populate app_config.ready() Файл "/opt/atlassian/pipelines/agent/build/shifts/apps.py", строка 11, in ready schedule = Schedule.objects.filter(func=func).exists() Файл "/usr/local/lib/python3.8/dist-packages/django/db/models/query.py", строка 808, in exists return self.query.has_results(using=self.db) Файл "/usr/local/lib/python3.8/dist-packages/django/db/models/sql/query.py", строка 559, in has_results return compiler.has_results() Файл "/usr/local/lib/python3.8/dist-packages/django/db/models/sql/compiler.py", строка 1139, в has_results return bool(self.execute_sql(SINGLE)) Файл "/usr/local/lib/python3.8/dist-packages/django/db/models/sql/compiler.py", строка 1169, в execute_sql cursor.execute(sql, params) Файл "/usr/local/lib/python3.8/dist-packages/django/db/backends/utils.py", строка 98, в execute return super().execute(sql, params) Файл "/usr/local/lib/python3.8/dist-packages/django/db/backends/utils.py", строка 66, в execute return self._execute_with_wrappers(sql, params, many=False, executor=self._execute) File "/usr/local/lib/python3.8/dist-packages/django/db/backends/utils.py", строка 75, в _execute_with_wrappers return executor(sql, params, many, context) Файл "/usr/local/lib/python3.8/dist-packages/django/db/backends/utils.py", строка 84, in _execute return self.cursor.execute(sql, params) Файл "/usr/local/lib/python3.8/dist-packages/django/db/utils.py", строка 90, in exit raise dj_exc_value.with_traceback(traceback) from exc_value Файл "/usr/local/lib/python3.8/dist-packages/django/db/backends/utils.py", строка 84, in _execute return self.cursor.execute(sql, params) django.db.utils.ProgrammingError: relation "django_q_schedule" does не существует LINE 1: SELECT (1) AS "a" FROM "django_q_schedule" WHERE "django_q_s...

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

В трассировке указано, что исключение происходит в manage.py в строке 17; которая относится к coverage run manage.py test.

Я полагаю, что вам нужно выполнить python manage.py migrate перед запуском тестов, чтобы таблицы, управляемые djangoq, были созданы.

Вы уверены, что при первой миграции вы получаете тот же отслеженный результат?

Вернуться на верх