2012-03-14 126 views
9

我在学习rails,并且遇到了迁移。似乎每次我想要编辑一个模型,我都需要添加一个迁移脚本,尽管我还没有投入生产。Rails - 从模型生成迁移脚本

你可以编辑你的模型,添加你需要的所有属性,并且在发布之前,是否有自动生成的迁移脚本?

谢谢!

+1

手动编写迁移脚本确实不难。 – 2012-03-14 15:45:01

+0

是真实的,但对于我所有的变化(在开发过程中,我有很多变化),我需要不少AddXToY迁移脚本...... – Karan 2012-03-14 15:48:42

+2

好吧,我想我可以编辑原始迁移脚本,然后删除并重新加载数据库 – Karan 2012-03-14 15:49:28

回答

3

我同意迄今为止的意见。迁移的想法是为了简化流式调整数据模式以适应您的应用程序,因为您希望添加新字段。这是一个简单而美观的系统。

因此,您可以(也应该)使用rails generate migration...,因为它不仅在许多常见情况下生成正确的代码,还会跟踪哪些迁移已在不同版本的数据库中运行。见http://guides.rubyonrails.org/migrations.html#creating-a-migration

常见的工作流程可能是这样的:

  • 创建一个新的模式,例如用户与像名字,姓氏领域,USER_NAME
  • 这将创建一个相关的迁移,这可以使用bundle exec rake db:migrate运行 - 您的数据库架构将更新
  • 您决定需要其他信息,例如生日,因此请运行rails generate migration AddBirthdateToUser birthdate:date。对于一些简单的操作,如添加列,索引等,将生成完整的迁移代码;在其他情况下,您需要编写迁移。完成后,运行迁移。
  • 如果您在开发过程中发现问题,例如字段类型应该是float而不是整数,或者您忘记添加索引,则可以回滚迁移(bundle exec rake db:rollback),修复迁移并重新运行它。
  • 运行您的测试(它将运行迁移),并且当它在本地适用于您时,请检入文件(包括迁移)并将其部署到QA或登台服务器,该服务器拥有自己的数据库副本。
  • 在登台服务器上运行rake db:migrate。如果你在一个团队中,并且其他开发人员已经检查过迁移,他们的意志也会运行。现在你的代码和数据模式是同步的。
  • 重复:-)

有任何生产部署过程中运行的迁移没有伤害(我恭敬地上述评论不同意) - 你应该拥抱转变观念,即使这样的变化(可在其他环境中难以置信的难度)是日常Rails生活中的正常部分!

4

如果您使用rails 3+,您可能需要考虑使用DataMapper而不是ActiveRecord。它允许您在模型中定义数据模型,而不是多个迁移文件。据我所知DataMapper可以让你从变化中产生迁移。

这是在更广泛的ORM社区中经常使用的经过验证和信任的模式。