2011-01-31 45 views
5

我們一直在使用Grails了一段時間,我的團隊負責人提出了關於Grails的ORM(GORM)一些問題:我們如何在Grails中遷移/更新數據庫模式?

  1. 我們如何保持數據庫模式,一旦我們已經轉移到生產?
  2. 我們可以用Grails更新數據庫模式嗎?
  3. 如果模式已更新,更改是否會自動反映/框架是否處理此問題?
  4. 有沒有Grails的插件可以讓我們無需頭痛地更新模式?

回答

10

我最近發佈了數據庫遷移官方Grails的插件 - 在http://grails-plugins.github.com/grails-database-migration/docs/manual/index.html

看到http://grails.org/plugin/database-migration和文檔我與Liquibase對這個作者的工作,所以liquibase插件前輩現在已經過時和新版本應該使用最新版本的Liquibase(2.0),並且由SpringSource正式支持。他的公告見http://blog.liquibase.org/2011/01/new-standard-liquibase-plugin-grails-database-migration.html

問的Grails用戶郵件列表上(註冊從http://grails.org/Mailing+lists),或在http://grails-plugins.847840.n3.nabble.com/新插件論壇使用的問題,或直接發送電子郵件的作者:)

+0

新的數據庫插件絕對是最好的選擇 – leebutts 2011-01-31 22:14:31

1

雖然「自動創建」功能可以讓項目啓動並運行,但我發現liquibase是保持db最新的最佳方式。有一個grails plugin,我相信DSL的工作也正在進行。因此,創建一個基線模式(您可以使用liquibase的generate-changelog),然後通過liquibase進行所有未來更改,它將管理更新,回滾以及甚至某些數據庫互操作。您可以設置DataSource.groovy中的配置,以驗證和Grails將無法啓動,如果方案不匹配域的配置:

environments { 
    development { 
     dataSource { 
      dbCreate = "validate" 

您還可能有興趣在liquibase-runner plugin以在應用程序啓動運行遷移。

+1

現在我已經試過伯特的數據庫插件,它的要好得多 - 使用! – 2011-02-01 20:49:28

4
  1. 爲您的生產環境中刪除DataSource.groovydbCreate參數 - 這將自動更新數據庫架構停止GORM。

  2. 當然。使用LiquiBase plugin

  3. GORM可以用dbCreate='update'來做,但強烈不建議。例如,如果您重命名一個字段,GORM/LiquiBase永遠不會確定您必須遷移數據,而不僅僅是刪除+創建。

  4. 在一行中:grails db-diff生成LiquiBase的changelog.xmlgrails migrate -Dgrails.env=<whatever environment>將其應用於各自的db服務器。

相關問題