Grails - 上线后更新域名 - 我会丢失数据吗?

时间:2010-04-27 20:29:05

标签: grails schema upgrade

我正在编写我的第一个grails应用程序的一半。到目前为止它确实很顺利,但我只是意识到,当我上线时,我将无法改变域模型。

应用程序由MySql数据库支持,我目前只有一个感兴趣的对象'Person'。如果在部署之后我想添加一个“组”域,那么一个Person有很多组,我将不得不对数据库做什么?我是否会松开MySQL数据库中的任何现有行?

人们通常如何处理这种情况?有没有一种聪明的方法来设计我的域或一个简单的工具来管理MySql表中的列添加?

V1

class Person {      
  String firstName;      
  String lastName;      
  String email;      
  String phoneNumber;    
}

V2

class Person {
  static hasMany = [groups:Group]
  String firstName;      
  String lastName;      
  String email;      
  String phoneNumber;    
}

亲切的问候,

GAV株系

3 个答案:

答案 0 :(得分:3)

在生产中,您需要确保Grails不会修改您的数据库架构。大多数人处理此问题的方法是在开发中对更新进行建模,然后创建SQL更新脚本以更新生产数据库并在部署之前应用它们。在这种情况下,提供grails的Schema Export工具会有所帮助。

还有像DbMigrate插件这样的工具来帮助解决这些问题。

答案 1 :(得分:2)

另外,您可以使用基于AutoBase plugin的Grails的here(更多信息LiquiBase)。

答案 2 :(得分:1)

在DataSource.groovy文件中,您将找到数据库的配置。如果验证生产配置中的dbCreate属性是否设置为“update”,那么您应该没问题并且不会丢失任何数据。以下是配置示例。

        production {
            dataSource {
                    dbCreate = "update"
                    username = "user"
                    password = "pass"
                    url = "jdbc:mysql://dbmaster/databasename"
            }
        }