2017-02-13 1 views
2

У меня есть рабочий сайт и база данных на моем dev-сервере, который я пытаюсь настроить на реальном сервере. Я делаю следующее:Переходы Django: отношения не существует

  • Git клон репозитория с сервера Дев на реальном сервере
  • Создать пустую базу данных на реальном сервере (Posgres)
  • Update settings.py на реальном сервере для всех соответствующие настройки базы данных и т.д.
  • удалить все миграции файлы/папки и удалить все * .pyc файлы
  • питон manage.py makemigrations

Я получаю ошибку: django.db.utils.ProgrammingError: relation "myapp_mytable" does not exist.

Кажется, что начальная миграция не может произойти. Единственное решение, которое я нашел, - это войти в свой файл settings.py и прокомментировать все мои приложения в INSTALLED_APPS и зайти в мой основной файл urls.py и прокомментировать все мои URL.

После комментирования этих разделов я могу выполнить начальную миграцию. После этого я могу разогнать свои приложения и начать их миграцию один за другим, то есть: python manage.py makemigrations appname, а затем python manage.py migrate

У меня есть обходное решение, но оно далеко не идеальное. Конечно, есть способ рассказать джанго, что я создал совершенно новую пустую базу данных, поэтому сначала нужно выполнить первоначальную миграцию. Я автоматизирую настройку сервера с помощью Ansible, поэтому требуя, чтобы я выполнял весь этот комментарий/раскомментирование руководства и несколько миграций, не очень хорош.

UPDATE:

Согласно комментариям, я не думаю, чтобы удалить миграции. Таким образом, я сделал следующее на dev-сервере, чтобы попытаться их воссоздать: link. Однако, хотя у меня теперь есть файлы миграции, которые я скопировал на живой сервер, когда я пытаюсь запустить их, я получаю ту же ошибку, что и выше.

Я прочитал файлы миграции, и я не вижу ничего, что упоминает о создании начальной схемы миграции/базы данных. Он упоминает только о создании моделей приложений. Я не могу понять, как выполнить начальную миграцию до того, как миграция приложений может быть выполнена. Мне нужно как-то воссоздать все файлы миграции (включая создание исходной схемы db) с нуля, чтобы они могли запускаться на сервере.

+2

* Почему бы вам удалить все файлы миграции? Все дело не в этом, а в том, чтобы запустить те, которые вы уже создали. –

+0

Хорошо, я, очевидно, неправильно понял, как это сделать. У меня создалось впечатление, что мне нужно запустить makemigrations на новом сервере, чтобы django увидела, что это пустая база данных и создает новые. Очевидно, я неправильно понял. Не уверен, почему совершенно правильный вопрос должен быть опущен. Тогда тогда возникает вопрос задать вопрос. Исходный вопрос обновлен. – darkpool

+0

Поскольку ваш код находится в git, вы должны просто сбросить состояние туда, где выполняются миграции, а не воссоздавать их. И я не уверен, что вы подразумеваете под «как выполнить первоначальную миграцию до миграции приложений» - нет отдельной «начальной миграции». –

ответ

2

В конце концов я понял вопрос благодаря @Daniel Roseman в комментариях. Я делаю следующее:

list(Correlation().get_entries()) 

Что это делает, было создание модели экземпляра (т.е. корреляции) и вызова метода() против этого в get_entries. Затем я окружил это в списке(). По какой-то причине это остановило миграцию от работы. Я удалил список(), который не был нужен в любом случае, и все это работает сейчас.