Как предотвратить запуск миграций django?
Моя команда часто использует производственную БД для тестирования новых изменений, и не раз миграции создавались и применялись до проверки кода, создавая проблемы в производстве.
В этой ситуации очень много неправильных вещей, но я надеюсь хотя бы защитить нашу prod DB, блокируя миграции на основе состояния переменной окружения. Возможно ли это?
Похоже, что это может сработать, но интересно, есть ли у других менее хакерские ответы:
# Prevent migrations from running in dev env (where the prod DB is used).
if ENVIRONMENT == 'development' and 'migrate' in sys.argv:
INSTALLED_APPS.remove('app_name')
Поэтому мы решили эту проблему следующим образом. Вместо одного файла settings.py у нас несколько разных settings/dev.py, settings/prod.py, settings/local.py и т.д.
Затем, когда вы выполняете любую команду manage.py, вам нужно явно добавить, какой файл настроек вы хотите использовать.
DJANGO_SETTINGS_MODULE=myapp.settings.dev ./manage.py migrate
мы ускоряем это с помощью файла manage.sh рядом с manage.py, который выглядит примерно так:
EXPECTED_ENVS=(local development staging production)
if [[ ${EXPECTED_ENVS[*]} =~ "$1" ]]
then
# Pop the first argument parameters after 1
SETTINGS_ENV=$1
shift 1
else
SETTINGS_ENV="local"
fi
export DJANGO_SETTINGS_MODULE="myapp.settings.${SETTINGS_ENV}"
echo "Using settings module ${DJANGO_SETTINGS_MODULE}"
./manage.py $@
Тогда вы можете просто делать такие вещи
./manage.sh development migrate
./manage.sh production shell
./manage.sh local runserver
приведенным выше кодом, опуская имя среды, будет использоваться "локальный" файл настроек.
./manage.sh runserver # uses local as default