Bir süredir bir önceki sürüm grails-database-migragu eklentisini kullanıyordum ve bununla hiçbir zaman büyük sorunlar yaşamadım. Ancak, son zamanlarda ben 3.0.9 grails tüm projeyi yükseltilmiş ve bazı ek gelişme yoktu, davranış aşağıdaki gibidir:grails veritabanı geçiş eklentisi sorunları grails'e yükselttikten sonra 3
yerel makineye akım prod DB yapısı İthal (yani DB kopya son değişiklik olmadan ve yeni kişiler)
yürütün: Bu noktada beklenen ne
grails -Dgrails.env=staging dbm-gorm-diff changlog.xml
mevcut varlıklar ve yenilerinin tüm değişikliklerle yeni changlog.xml dosyasıdır.
alıyorum Ne:
- Yeni tanımlanan kişiler otomatik veritabanına eklenen gördü. Ben
grails -Dgrails.env=staging run-app
denemenizi olursa BuradaERROR 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)
da: changlog.xml içinde
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
ve
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'
}
GÜNCELLEME bu sorunu yaklaşım için başka bir yol vardır: planım benim şimdiki prod DB dayalı bir changelog oluşturmak ve sonra yapılan değişiklikler için bir diff üretmek amaçlanmıştır. Basit ve basit geliyor; Ancak, beklendiği gibi çalışmadı. İşte ne yaptım:
- Dumped prod DB: Bu noktada
grails dbm-generate-changelog changelog-init.xml --add
, DB mevcut durumunu içerecek şekilde değişiklik günlüğü-init.xml bekleniyor. Fakat bunun yerine, önce modellerime dayalı değişiklikleri uyguladı ve ardından diff'i oluşturmaya çalıştı. Sonunda, tüm mevcut DB'm de dahil olmak üzere, gorm'dan uygulanan değişikliklerle birlikte bir değişiklik yazdım.
Burada yanlış olan ne yapıyorum?
staging:
dataSource:
dbCreate: ~
url: jdbc:mysql://127.0.0.1:3306/triz_staging?useUnicode=yes&characterEncoding=UTF-8
properties:
jmxEnabled: true
Ayrıca tamamen çalıştı:
Ek Gözlemler
Ben HERHANGİ göç ilgili komutları çalıştırmayı denediğinizde O benziyor, grails benim yapılandırma söylese aracılığıyla tüm değişiklikler bundan önce de geçerlidir dbCreate
'un kaldırılması. Bir şey değiştirmedi ... Ben bitti, sonraki nereye taşınacağına dair hiçbir fikrim yok !!!