Использование производственных настроек с подключаемым модулем миграции базы данных

Я пытаюсь следовать руководству здесь.

Я объявил зависимость для подключаемого модуля миграции базы данных в моем файле BuildConfig.groovy с помощью runtime ":database-migration:1.0", а затем скомпилировал. Я также закомментировал строку dbCreate моих производственных настроек в моем файле DataSource.groovy. Моя производственная база данных пуста, в ней нет таблиц.

Затем я пытаюсь запустить две команды для создания моего начального журнала изменений:

grails dbm-create-changelog
grails prod dbm-generate-gorm-changelog --add changelog-1.0.groovy

Проблема в том, что первая команда создает таблицы в моей базе данных разработки, а не в производственной базе данных. Затем второй команде не удается создать файл changelog-1.0.groovy, который она должна создать (я предполагаю), потому что в производственной базе данных никогда не создавались таблицы. Я получаю несколько ошибок, которые говорят, что Hibernate не удалось проиндексировать базу данных, и я получаю кучу таких ошибок:

| Error 2012-07-10 08:40:28,704 [Compass Gps Index [pool-11-thread-2]] ERROR util.JDBCExceptionReporter  - Table 'mygrailsapp_prod.some_class' doesn't exist

Даже когда я комментирую свои настройки разработки в файле DataSource.groovy, Grails все еще ищет мою базу данных разработки. Однако я должен указать, что если я уберу prod из второй команды, файл changelog-1.0.groovy сгенерируется нормально, хотя я не уверен, будет ли он каким-то образом испорчен, потому что он был сгенерирован из базы данных разработки (в которой не было таблиц, пока я не запустил первая команда) вместо производственной базы данных.

Что я здесь делаю неправильно?


person ubiquibacon    schedule 10.07.2012    source источник


Ответы (1)


The problem is the first command creates tables in my development database, not my production database.

Вероятно, это потому, что он работает со средой разработки, и у вас все еще есть его dbCreate, установленный на «обновление».

Then the second command fails to create the changelog-1.0.groovy file it is supposed to create (I assume) because the production database never had any tables created.

Это не совсем точно. По ссылке, которую вы разместили, после этого шага говорится: «Обратите внимание, что ваша база данных останется пустой!» Таблицы базы данных будут созданы только при выполнении команды dbm-update. Вот когда журнал изменений действительно выполняется.

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

person Gregg    schedule 10.07.2012
comment
Я действительно пробовал это. Когда я добавляю первую команду с prod, я получаю ту же ошибку, что и со второй командой. - person ubiquibacon; 10.07.2012
comment
Итак, когда вы запускаете «grails prod dbm-create-changelog», вы получаете ошибку таблицы «mygrailsapp_prod.some_class не существует»? - person Gregg; 10.07.2012
comment
Правильный. Это точно такая же ошибка, с которой я запускался grails prod dbm-generate-gorm-changelog --add changelog-1.0.groovy - person ubiquibacon; 10.07.2012
comment
Технически все, что делает dbm-create-changelog, — это создает пустой файл журнала изменений. Поэтому я полагаю, что включение prod перед ним не имеет значения. Я собираюсь отредактировать свой ответ... - person Gregg; 10.07.2012
comment
На самом деле я не ожидал, что какие-либо таблицы будут сгенерированы после запуска любой из команд, но первая команда действительно генерирует таблицы. - person ubiquibacon; 10.07.2012
comment
Как я уже сказал, это потому, что вы, вероятно, установили dbCreate для обновления или создания в своем блоке разработки DataSource. Измените это на none, и он не будет создавать таблицы. - person Gregg; 10.07.2012
comment
Если я удалю строку dbCreate из настроек среды разработки и запущу dbm-generate-changelog, я получу то же предупреждение, что и раньше. - person ubiquibacon; 10.07.2012
comment
Вы запускаете его с «prod» или без? Вам не нужно использовать «prod» для этих команд. - person Gregg; 10.07.2012
comment
Я работал без prod, так как сейчас пытаюсь сгенерировать настройки разработки, но получаю те же ошибки. - person ubiquibacon; 10.07.2012