Веб-приложение Azure периодически копирует код из временного хранилища в домашний

Я развертываю приложение Django в веб-приложении Azure через Github Actions. Код постоянно развертывается в папку tmp, но не всегда копируется в wwwroot, хотя в журналах развертывания Oryx указано, что содержимое копируется. Что вызывает это прерывистое поведение?

      
Detecting platforms...
Detected following platforms:
  python: 3.8.12

Using intermediate directory '/tmp/8da59cae1f18fde'.

Copying files to the intermediate directory...
Done in 0 sec(s).

Source directory     : /tmp/8da59cae1f18fde
Destination directory: /home/site/wwwroot

Python Version: /opt/python/3.8.12/bin/python3.8
Creating directory for command manifest file if it doesnot exist
Removing existing manifest file
Python Virtual Environment: antenv
Creating virtual environment...
Activating virtual environment...
Running pip install...

Content in source directory is a Django app
Running collectstatic...
Done in 18 sec(s).
Not a vso image, so not writing build commands
Preparing output...

Copying files to destination directory '/tmp/_preCompressedDestinationDir'...
Done in 31 sec(s).
Compressing content of directory '/tmp/_preCompressedDestinationDir'...
Copied the compressed output to '/home/site/wwwroot'

Removing existing manifest file
Creating a manifest file...
Manifest file created.

Done in 244 sec(s).

1 ответ

Для других, которые могут бороться с этой же проблемой, особенно с приложениями Django, я нашел следующий обходной путь:

Узнав больше о том, как на самом деле работает сборка Oryx, я теперь понимаю, что код копируется в wwwroot, но в виде архива. Затем код извлекается в tmp и выполняется в этой папке. Это вызывает проблемы с запуском миграций django, поскольку папка миграции не является постоянной в том месте, где запускается код, т. е. вы не можете автоматически запускать миграции из папки tmp (потому что, предполагая, что вы не помещаете свои миграции в систему управления версиями , здесь нет истории миграции.) и вы не можете запускать миграции из wwwroot (поскольку новый код существует только в архиве). Итак, чтобы сохранить историю миграции, вам необходимо:

  1. Полностью извлеките output.tar.gz в wwwroot и перезапишите существующие файлы. ИЛИ
  2. Сделайте 1. ОДИН РАЗ, чтобы подготовить структуру вашего проекта к выполнению миграции в wwwroot, и после этого скопируйте только файлы, необходимые для обнаружения изменений базы данных (в моем случае settings.py, forms.py, models.py и admin.py) из tmp в wwwroot. Это можно сделать автоматически, отредактировав команду запуска.
Другие вопросы по тегам