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