2016-03-21 20 views
1

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

  1. yerel makineye akım prod DB yapısı İthal (yani DB kopya son değişiklik olmadan ve yeni kişiler)

  2. 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 Burada

    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)

    başvurumun kısmıdır, enter image description here

da: changlog.xml içinde

  • değişiklikler sadece gibi zaten var olan tablolardan değişikliği içermektedir .yml

    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.build
    buildscript { 
        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:

  • tablolar
  • çalıştırın liquibase kaldırıldı

    1. 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 !!!

  • cevap

    0

    İşte asıl sebep olup olmadığından emin değilim bir anlaşma ... , ama tüm yaptığım application.yml den application.groovy için veri kaynağı yapılandırma taşınır ve her şey normale döndü.

    Düşüncelerini duymaktan mutluluk duyarım.

    Teşekkürler.