Heroku: Проблемы миграции при переносе производственной базы данных на тестирование и запуск rake db: migrate - PullRequest
1 голос
/ 17 августа 2011

У меня есть 3 экземпляра моего рельсового приложения на героку (тест, этап и производство). Когда я хочу проверить проблему, возникающую с данными реальных пользователей, я хотел бы выполнить heroku db: pull --app production, а затем heroku db: push --app test. Проблема в том, что на этом этапе heroku rake db: migrate --app test выдает ошибку, поскольку столбцы, которые пытается создать миграция, уже созданы.

Насколько я понимаю, heroku db: push помещает данные в существующую схему базы данных, а не буквально передает всю базу данных (включая схему). Это означает, что схема, к которой мы обращаемся, может быть более продвинутой, чем таблица миграции, к которой мы обращаемся, поскольку в этой таблице миграции будут отсутствовать записи миграции, которые не запускались в базе данных, из которой мы извлекли, но, очевидно, работали в базе данных, к которой мы подталкиваем .

Мой первый вопрос: правильно ли я понимаю, как это работает? Мой второй вопрос: как мне это исправить, чтобы я мог извлекать производственные данные, вставлять их в тестирование и запускать миграции без получения этой ошибки. В идеале я хотел бы скопировать производственную базу данных и вставить ее в тест, а затем полностью перенести ее, поскольку, если бы я мог это сделать, мне не пришлось бы беспокоиться о существующей схеме в тесте. Есть ли способ сделать это?

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

1 Ответ

5 голосов
/ 17 августа 2011

Нет, дБ: push выдвигает локальную схему и данные. Вы можете поместить свою локальную БД в пустую БД на Heorku, вот как я запускаю сайты в реальном времени - когда вы запускаете ее, вы видите, как она создает схему, а затем помещает данные в нее.

Я работаю так - Тестовая среда на Heroku - тот же код, что и в реальном времени - т.е. ветвь мастера (то есть то, что вживую и подтолкнуло для проверки) Вытащить БД из Live. Исправить в моей локальной системе. Нажмите, чтобы проверить и запустить миграцию. Тестовый релиз против БД на Heroku. Когда я счастлив, слить тестовый код в master, а затем развернуть и запустить миграцию. Промойте и повторите для будущих ошибок. Производственная БД никогда не должна иметь более продвинутую версию схемы, которая тестирует. Вы всегда можете проверить это, посмотрев таблицу schema_migrations - так Rails знает, какие миграции уже были выполнены, поэтому вы можете сравнить это с файлами db / migrations.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...