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

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

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

9 ответов

31 просмотр
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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Ребят в СИ можно реализовать ООП?
Николай
33
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта