Как предотвратить запуск миграций 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
Вернуться на верх