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, были созданы.
Вы уверены, что при первой миграции вы получаете тот же отслеженный результат?