Как исключить данные из локальной таблицы schema_migrations из отправки в базу данных Heroku? - PullRequest
2 голосов
/ 24 августа 2009

Мне удалось перенести мое приложение Ruby on Rails с MySQL (локальный разработчик) на сервер Heroku вместе с переносом модели с помощью команды heroku rake db:migrate. Я также прочитал документацию по Импорт / экспорт базы данных . Это документ относится к отправке фактических данных из моей локальной базы данных разработчиков в любую базу данных Heroku? Нужно ли что-нибудь изменить в файле database.yml, чтобы это произошло?

Я выполнил следующую команду:

heroku db:push

и я получаю ошибку:

Sending data
2 tables, 3 records
!!! Caught Server    Exception                                   | ETA:  --:--:--
Taps Server Error: PGError ERROR:  duplicate key value violates unique constraint
"unique_schema_migrations"

У меня есть 2 таблицы, одну я создаю для своего приложения, а другую schema_migrations. Общее количество записей в этих двух таблицах равно 3. Я также печатаю количество записей в созданной мной таблице, и оно показывает 0.

Есть идеи, чего мне не хватает или что я делаю неправильно?

EDIT: Я понял выше, у БД Heroku уже есть schema_migrations момент, когда я запустил миграцию.

Новый вопрос: Кто-нибудь знает, как я могу исключить данные из определенной таблицы из базы данных Heroku DB. Таблица для исключения в этом случае будет schema_migrations.

Не очень хорошее решение : Я погуглил, и у кого-то еще возникла та же проблема Он предложил назвать таблицу schema_migrations как zschema_migrations. Таким образом, данные из других таблиц будут отправлены должным образом, пока не произойдет сбой в последней таблице. Это довольно плохое решение, но пока подойдет.

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

Ответы [ 5 ]

1 голос
/ 26 августа 2009

Два возможных варианта:

  1. Gem heroku и gem taps (которые он использует для синхронизации баз данных) - оба с открытым исходным кодом - их можно разветвить, изменив API клиента taps на поддержите исключение таблиц из толчка, затем измените драгоценный камень heroku, чтобы использовать эту новую опцию.

  2. Вы можете написать скрипт-обертку, который использует pgdump для резервного копирования таблицы schema_migrations, удаляет эту таблицу, heroku push проверяет базу данных, затем перезагружает таблицу.

0 голосов
/ 22 августа 2010

Толкать / тянуть из определенных таблиц

heroku db: тянуть - таблицы логов, теги

http://blog.heroku.com/archives/2010/4/21/supporting_big_data_part_1

0 голосов
/ 25 июля 2010

Если ваши базы данных не синхронизированы, вы всегда можете сбросить базу данных Heroku, прежде чем нажать

heroku db:reset
0 голосов
/ 21 марта 2010

Я только что развернул бета-версию Rails 3 на heroku на их новом бамбуковом сервере. Теперь я могу загрузить данные с моей локальной машины разработчика в базу данных heroku, выполнив:

heroku rake db:fixtures:load test/fixtures/my_model.yml

Данные затем правильно распространяются в базе данных Heroku. Несмотря на то, что я указал конкретный файл данных, он автоматически передает данные из моих других файлов yaml. Возможно, это как-то связано с моими модельными отношениями.

0 голосов
/ 24 августа 2009

Это предположение, основанное на получаемой вами ошибке, но push выглядит так, как будто она захватывает схему и данные. Я бы попробовал нажать на пустую базу данных.

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