Rails - 从模型生成迁移脚本

时间:2012-03-14 15:43:59

标签: ruby-on-rails migration

我正在学习rails,我遇到了迁移。似乎每次我想编辑模型时,我都需要添加一个迁移脚本,即使我还没有投入生产。

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

谢谢!

2 个答案:

答案 0 :(得分:4)

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

这是一种经过尝试和信任的模式,经常在更广泛的ORM社区中使用。

答案 1 :(得分:3)

我同意迄今为止的评论。迁移的想法是使您可以轻松地根据需要添加新字段来适应数据模式以适合您的应用程序。这是一个简单而美丽的系统。

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

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

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

在生产部署期间运行迁移没有任何损害(我恭敬地不同意上面的评论) - 您应该接受这样的想法,即更改,甚至是这样的更改(在其他环境中可能非常困难)是正常的部分日常的Rails生活!