2011-07-10 110 views
0

db迁移的概念对我来说是新的,但它同时很棒。 :)Rails:重构迁移

我很好奇正确使用迁移,因为我需要知道如何通过迁移正确添加/删除/修改表中的列。在过去,我一直通过gui直接编辑数据库。 :/

什么是添加新列的最佳方式?我尝试过使用rails g migration :new_col => :attributes,但是如果我要创建/删除/摆弄许多列,这看起来像是一件混乱的事情。

我最大的担心,现在是学习如何与现场数据库做到这一点 - 我不能到处去hazardously编辑实时数据库,但我需要能够添加,说新user_profile领域和诸如此类的东西。

我有兴趣首先听到有关这方面的最佳方法,其次是您的建议和过去的经验。

谢谢,SO社区基本上给我一个准教育。

回答

1

当应用多个数据库更改时,可以在迁移文件内将它们分离到多个命令中。如果一个操作需要计算,您也可以将Ruby代码嵌入到这些方法中,就像您在任何其他Ruby类中工作一样。你也可以执行SQL的ActiveRecord之外做数据库的具体操作,或过于复杂的操作,一个ORM有效管理:

更多关于迁移方法的信息可以在这里找到: http://api.rubyonrails.org/classes/ActiveRecord/Migration.html

至于做在实时环境中,我会首先在一个临时环境中测试您的迁移,这个迁移环境是您的实时环境的镜像。如果登台成功,我会在运行生产中的任何迁移之前备份实时数据库。

警告一句话,如果迁移中途失败,您可能很容易陷入半应用状态,其中rake db:migrate:down也会失败。这些操作可能需要了解DDL语法(或生成此DDL的GUI程序)才能解决。这就是为什么在生产中应用迁移之前,良好的阶段性干运行很重要。

+0

事务过于依赖数据库的特定处理,不应该用来替代良好的部署实践。瞥一看http://stackoverflow.com/questions/1108749/limits-on-postgresql-schema-changes-inside-transactions,似乎并非所有的DDL操作都可以在一个事务中执行。然而,一个有用的提示我将开始将所有我的迁移包装在交易块中! –