以前のバージョンのgrails-database-migrationプラグインをしばらく使用していましたが、大きな問題は一度もありませんでした。次のようにしかし、最近私は3.0.9をGrailsのためにプロジェクト全体をアップグレードし、いくつかの追加の開発をした、行動:grailsへのアップグレード後のgrailsデータベース移行のプラグインの問題
は、ローカルマシンに現在のprod DB構造をインポート(DBコピーが最新の変更なしであることと、新しいエンティティ)
は実行します。私はこの時点で予想何
grails -Dgrails.env=staging dbm-gorm-diff changlog.xml
は、既存のエンティティと新しいもののすべての変更を含む新しいchanglog.xmlファイルです。
は、私が何を得る:
- 新たに定義されたエンティティは自動的にDBに追加しまいました。私は
grails -Dgrails.env=staging run-app
ERROR grails.boot.GrailsApp - Application startup failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springLiquibase_dataSource': Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: liquibase.integration.spring.SpringLiquibase.createDatabase(Ljava/sql/Connection;Lliquibase/resource/ResourceAccessor;)Lliquibase/database/Database; FAILURE: Build failed with an exception.
- What went wrong: Execution failed for task ':bootRun'. Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1 ...
...
- Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. | Error Failed to start server (Use --stacktrace to see the full trace)
:changlog.xmlで
dataSource:
pooled: true
url: jdbc:mysql://127.0.0.1:3306/triz?useUnicode=yes&characterEncoding=UTF-8
driverClassName: "com.mysql.jdbc.Driver"
jmxExport: true
username: root
password: password
dialect: org.hibernate.dialect.MySQL5InnoDBDialect
properties:
jmxEnabled: true
initialSize: 5
maxActive: 50
minIdle: 5
maxIdle: 25
maxWait: 10000
maxAge: 600000
timeBetweenEvictionRunsMillis: 5000
minEvictableIdleTimeMillis: 60000
validationQuery: SELECT 1
validationQueryTimeout: 3
validationInterval: 15000
testOnBorrow: true
testWhileIdle: true
testOnReturn: false
jdbcInterceptors: ConnectionState
defaultTransactionIsolation: 2
environments:
development:
dataSource:
dbCreate: create
# url: jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
test:
dataSource:
dbCreate: update
url: jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
staging:
dataSource:
url: jdbc:mysql://127.0.0.1:3306/triz_staging?useUnicode=yes&characterEncoding=UTF-8
と
をgradle.buildbuildscript {
ext {
grailsVersion = project.grailsVersion
}
repositories {
mavenCentral()
mavenLocal()
maven { url "https://repo.grails.org/grails/core" }
}
dependencies {
classpath "org.grails:grails-gradle-plugin:$grailsVersion"
classpath 'com.bertramlabs.plugins:asset-pipeline-gradle:2.5.0'
// classpath 'com.bertramlabs.plugins:less-asset-pipeline:2.6.7'
classpath "org.grails.plugins:hibernate:4.3.10.5"
classpath 'org.grails.plugins:database-migration:2.0.0.RC4'
}
}
...
...
dependencies {
...
compile 'org.liquibase:liquibase-core:3.3.2'
runtime 'org.grails.plugins:database-migration:2.0.0.RC4'
}
UPDATE 私はこの問題にアプローチする別の方法があります。 私の計画は私の現在のprod DBに基づいて変更履歴を生成し、私が行った変更のための差分を生成することでした。シンプルで簡単です。しかし、期待どおりにはうまくいかなかった。ここに私がやったことです:
- ダンプされたPROD DB
- は、テーブル
- 実行LiquiBaseを削除:この時点で
grails dbm-generate-changelog changelog-init.xml --add
、私はDBの現在の状態を格納するためのchangelog-init.xmlを期待しました。しかし、代わりに私のモデルに基づいた変更を最初に適用してからdiffを生成しようとしました。最終的に、私はgormから変更が加えられた既存のDB全体を含むチェンジログに終わった。
私はここで間違っていますか?
追加の観察
私は、移行関連のコマンドを実行しようとするたびにそれはGrailsのが私の設定は言ってもを通じて、その前にすべての変更を適用し、次のようになります。
staging:
dataSource:
dbCreate: ~
url: jdbc:mysql://127.0.0.1:3306/triz_staging?useUnicode=yes&characterEncoding=UTF-8
properties:
jmxEnabled: true
も完全に試してみました削除dbCreate
。何も変えていない... 私はやっている、次のどこに移動するか分からない!