2015-11-15 4 views
1

бегаю миграции на сервере таким образом:Предотвращение FieldDoesNotExist в Django приложение на рабочем сервере во время миграции

  1. Загрузить models.py файл на сервер с некоторым новым полем sfield им модели Mobject
  2. Выполните команду makemigration в manage.py
  3. выполнить команду migrate в manage.py Но есть некоторые запросы между окончанием первого шага и окончанием третьего шага, которые не удались с django.core.exceptions.FieldDoesNotExist: Mobject has no field named 'sfield' (что очевидно, потому что django ORM не может извлечь это поле из БД но поле уже в Кла ss, поэтому django попытается это сделать)

Можно ли сделать все 3 шага «Atomic»? Или глобальное игнорирование этих исключений, потому что на данный момент мне не нужен sfield, я хочу выполнить миграцию без исключений. Или может быть, я могу временно отметить новое поле каким-то образом, чтобы предотвратить извлечение django из базы данных, но он должен быть видимым для makemigrations/migrate?

ответ

1

если вы делаете select * from yourtable, тогда django пытается получить все поля, определенные в модели.

вы можете использовать only() в ваших ORMs выбрать конкретные поля, так что исключение не будет поднят во время миграции новых полей, которые не используются в ОРМ еще

Кстати, вы должны создать файлы миграции локально, проверить новый на локальном компьютере, а затем передать файлы миграции на сервер. На сервере при развертывании вам нужно только migrate сразу после развертывания, что сокращает время, когда могут произойти исключения.

из Джанго документов:

Причина, по которой есть отдельные команды, чтобы сделать и применить миграции, потому что вы будете совершать миграции на свой контроль версий системы и отправить их с приложением; они не только упрощают вашу разработку , но и другие разработчики, а также в производстве .

+1

Спасибо, да, я согласен - локальный сервер разработки - это правильный подход для создания миграции, но, как вы упомянули, это не решит проблему, это уменьшит шаги миграции сервера до 2: 'Upload' и' migrate', но все равно может потребоваться некоторая просьба. Только интересная вещь, благодаря вашему мнению, я также нашел 'defer', я тоже попробую. – user3479125

+0

@ user3479125 приятно, удачи! ;) – doniyor

 Смежные вопросы

  • Нет связанных вопросов^_^