2016-03-21 17 views
1

以前のバージョンのgrails-database-migrationプラグインをしばらく使用していましたが、大きな問題は一度もありませんでした。次のようにしかし、最近私は3.0.9をGrailsのためにプロジェクト全体をアップグレードし、いくつかの追加の開発をした、行動:grailsへのアップグレード後のgrailsデータベース移行のプラグインの問題

  1. は、ローカルマシンに現在のprod DB構造をインポート(DBコピーが最新の変更なしであることと、新しいエンティティ)

  2. は実行します。私はこの時点で予想何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)

    を実行しようとした場合にも、ここでは私のアプリケーションの一部である enter image description here

:changlog.xmlで

  • 変更は唯一のような既存のテーブルの変更を、含ま.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 
    

    を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' 
    } 
    

    UPDATE 私はこの問題にアプローチする別の方法があります。 私の計画は私の現在のprod DBに基づいて変更履歴を生成し、私が行った変更のための差分を生成することでした。シンプルで簡単です。しかし、期待どおりにはうまくいかなかった。ここに私がやったことです:

    1. ダンプされたPROD DB
    2. は、テーブル
    3. 実行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。何も変えていない... 私はやっている、次のどこに移動するか分からない!

  • 答えて

    0

    私はそれが本当の理由かどうかはわかりませんが、データソース設定をapplication.ymlからapplication.groovyに移動し、すべてが正常に戻ってきました。

    私は考えを聞いてうれしいです。

    ありがとうございました。