с джанго.
Джанга крутится внутри докера. В скрипте старта захардкожен код сборки статики и миграции.
Соответственно он запускается долго.
Но проблема в другом, как можно запустить новый инстанс, применить миграции и на него переключиться? Чтобы во время миграции не сломалась предыдущая версия?
Как вариант я вижу - никогда не переименовывать названия столбцов в БД. Но вдруг есть другой способ?
Up!
ты хочешь поднимать разные версии проекта на одной базе без полной потери данных? Миграция предполагают откат обратно Например, для приложения someapp последняя миграция - под индексом 0010 manage.py migrate someapp 0009 и вот ты откатился при условии, что кастом миграции написаны правильно, миграции предполагают откат без последствий Можно до переключения версии проекта откатиться, а потом уже переключить версию; Чтобы упростить регистр версия проекта->список необходимых миграций, я бы, наверное, расширил табличку django-migrations и писал бы туда еще версию релиза, тогда можно будет понять куда надо откатиться для той или иной версии проекта вероятно, чтобы это работало хорошо, стоит писать тесты на успешный реверс миграций (всё описанное выше - какая-то лютая дичь, но как лучше решить такую задачу - я не придумал) Но в общем-то, гемморно это все и фишка докера в автономности и атомарности - есть система, не отчего-либо извне не зависит, надо - собрал, запустил
Я думаю нужно делать БД таким образом, чтобы не было удалений столбца и переименовывания. Тогда предыдущая версия будет работать спокойно. Если что-то нужно - добавь и при следующем деплое удали уже не нужную строку.
а если у тебя в новом стоблце стоит not null?
Ну, кодер я или нет? То есть это все можно предусмотреть.
как ты такое предусмотришь в разрезе твоего решения? :) новое поле not null, в моделе прошлой версии его нет. ты пытаешься сделать save() и получаешь ошибку от БД
Ну, сейва не будет. В момент апгрейда будет только чтение данных. Или можно средствами базы сделать дефолное значение
с моим решение, мягко говоря, не все хорошо, но это решение принесет еще больше боли; но спорить не буду, дело хозяйское :)
Я вообще решил, что если бэк отвечает 50х кодом, то насильно в нгинсе отвечать 200
Обсуждают сегодня