2011-01-31 49 views
5

Chúng tôi đã làm việc với Grails một lúc và Trưởng nhóm của tôi nêu ra một số câu hỏi về Grails ORM (GORM):Làm cách nào để di chuyển/cập nhật lược đồ cơ sở dữ liệu trong Grails?

  1. Làm thế nào để chúng tôi duy trì cấu trúc CSDL khi chúng tôi đã chuyển sang sản xuất?
  2. Chúng tôi có thể cập nhật giản đồ cơ sở dữ liệu với Grails không?
  3. Nếu lược đồ được cập nhật, các thay đổi sẽ được tự động phản ánh/liệu khuôn khổ có quan tâm đến điều này không?
  4. Có plugin nào cho Grails cho phép chúng tôi cập nhật giản đồ mà không bị đau đầu không?

Trả lời

10

Gần đây tôi phát hành Grails Plugin chính thức cho sự di cư của cơ sở dữ liệu - xem http://grails.org/plugin/database-migration và các tài liệu tại http://grails-plugins.github.com/grails-database-migration/docs/manual/index.html

Tôi đang làm việc với tác giả của Liquibase về vấn đề này, vì vậy cũ liquibase Plugin hiện đang bị phản đối và cái mới nên được sử dụng vì nó sử dụng phiên bản mới nhất của Liquibase (2.0) và được SpringSource hỗ trợ chính thức. Xem http://blog.liquibase.org/2011/01/new-standard-liquibase-plugin-grails-database-migration.html để biết thông báo của anh ấy.

Đặt câu hỏi sử dụng trên Grails mailing list tài khoản (đăng ký từ http://grails.org/Mailing+lists) hoặc diễn đàn plugin mới tại http://grails-plugins.847840.n3.nabble.com/ hoặc email cho tác giả trực tiếp :)

+0

Plugin DB mới chắc chắn là lựa chọn tốt nhất – leebutts

1

Trong khi chức năng "tự động tạo" là ok để thiết lập và chạy dự án, tôi tìm thấy cách tốt nhất để giữ cho cập nhật mới nhất của bạn được cập nhật. Có một số grails plugin và tôi tin rằng công việc cũng đang được thực hiện trên một DSL. Vì vậy, hãy tạo một giản đồ cơ sở (bạn có thể sử dụng tạo thay đổi của liquibase) sau đó thực hiện tất cả các thay đổi trong tương lai thông qua liquibase và nó sẽ quản lý các bản cập nhật, rollback và thậm chí một số interop db cho bạn. Bạn có thể thiết lập cấu hình DataSource.groovy của bạn để xác minh và grails sẽ không khởi động nếu schema không phù hợp với cấu hình tên miền:

environments { 
    development { 
     dataSource { 
      dbCreate = "validate" 

Bạn cũng có thể quan tâm đến các liquibase-runner plugin để chạy di cư của bạn khi khởi động ứng dụng.

+1

bây giờ tôi đã thử cắm DB Burt và nó tốt hơn nhiều - sử dụng mà ! –

4
  1. Di dbCreate tham số trong DataSource.groovy cho môi trường sản xuất của bạn - điều này sẽ ngăn chặn GORM từ giản đồ DB tự động cập nhật.

  2. Chắc chắn. Sử dụng LiquiBase plugin.

  3. GORM có thể làm điều đó với dbCreate='update', nhưng không nên sử dụng. Ví dụ, nếu bạn đổi tên một trường, GORM/LiquiBase không bao giờ có thể xác định rằng bạn phải di chuyển dữ liệu, và không chỉ thả + tạo.

  4. Trong một dòng: grails db-diff để tạo ra changelog.xml của LiquiBase và grails migrate -Dgrails.env=<whatever environment> để áp dụng cho máy chủ db tương ứng.

Các vấn đề liên quan