170 похожих чатов

Дарова всем. Я чет задумался. Что делаю что-то не то

с джанго.
Джанга крутится внутри докера. В скрипте старта захардкожен код сборки статики и миграции.
Соответственно он запускается долго.
Но проблема в другом, как можно запустить новый инстанс, применить миграции и на него переключиться? Чтобы во время миграции не сломалась предыдущая версия?
Как вариант я вижу - никогда не переименовывать названия столбцов в БД. Но вдруг есть другой способ?

9 ответов

8 просмотров
E-T Автор вопроса

Up!

ты хочешь поднимать разные версии проекта на одной базе без полной потери данных? Миграция предполагают откат обратно Например, для приложения someapp последняя миграция - под индексом 0010 manage.py migrate someapp 0009 и вот ты откатился при условии, что кастом миграции написаны правильно, миграции предполагают откат без последствий Можно до переключения версии проекта откатиться, а потом уже переключить версию; Чтобы упростить регистр версия проекта->список необходимых миграций, я бы, наверное, расширил табличку django-migrations и писал бы туда еще версию релиза, тогда можно будет понять куда надо откатиться для той или иной версии проекта вероятно, чтобы это работало хорошо, стоит писать тесты на успешный реверс миграций (всё описанное выше - какая-то лютая дичь, но как лучше решить такую задачу - я не придумал) Но в общем-то, гемморно это все и фишка докера в автономности и атомарности - есть система, не отчего-либо извне не зависит, надо - собрал, запустил

E-T Автор вопроса

Я думаю нужно делать БД таким образом, чтобы не было удалений столбца и переименовывания. Тогда предыдущая версия будет работать спокойно. Если что-то нужно - добавь и при следующем деплое удали уже не нужную строку.

а если у тебя в новом стоблце стоит not null?

E-T Автор вопроса

Ну, кодер я или нет? То есть это все можно предусмотреть.

как ты такое предусмотришь в разрезе твоего решения? :) новое поле not null, в моделе прошлой версии его нет. ты пытаешься сделать save() и получаешь ошибку от БД

E-T Автор вопроса

Ну, сейва не будет. В момент апгрейда будет только чтение данных. Или можно средствами базы сделать дефолное значение

с моим решение, мягко говоря, не все хорошо, но это решение принесет еще больше боли; но спорить не буду, дело хозяйское :)

E-T Автор вопроса

Я вообще решил, что если бэк отвечает 50х кодом, то насильно в нгинсе отвечать 200

Похожие вопросы

Обсуждают сегодня

читать файл максимально быстро? странный вопрос))
zamtmn
53
Привет. Сразу скажу, что на C/C++/Rust я не пишу, но тем не менее возникла потребность дебага C/C++/Rust кода. Суть: есть серверное приложение, которое периодически ведёт себ...
ninekeem 🐳
4
А чего сейчас в моде вместо Error для эксепшенов? А то я тут внезапно узрел что он не рекомендуется :) У Try::Tiny какой-то совершенно ужасный синтаксис если надо конкретные э...
Denis F
16
всем привет! углубившись в плюсы и начав изучать реверсинг понял, что без асм'а никуда со своими высокоабстрактными представлениями начал изучать механизмы асма, и не совсем п...
9
буквально один оставшийся вопрос при выполнении строчки mov eax, 5 операнд "5" будет присутствовать где-либо в памяти (любой), кроме как в памяти блока .code? подвопрос: как...
12
Всем ку. Подскажите, если задекларировал массив так: int arr[10] = {1, 2, 3, 4}, то в arr[4] будет мусор или нуль?
Sasha K
14
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
я не понимаю mov [r11+8],rcx и прочие. мы записываем значение из rcx, куда?
Bor
15
у меня такой вопрос про память в x86 возник, может кто пояснить?.. у процессора есть (как минимум) 3 типа адресов (названия "п1", "п2", "п3" --- мои, чтобы проще было дальше)...
Toideng
5
А какие расширения активно используются в промышленности? Именно идейные, по типу гадт, а не всякие оверлоадедстрингс
Степан
11
Карта сайта