【问题标题】:Rails - Generating migration script from modelRails - 从模型生成迁移脚本
【发布时间】:2012-03-14 15:43:59
【问题描述】:

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

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

谢谢!

【问题讨论】:

  • 手动编写迁移脚本真的不难。
  • 好吧,我想我可以编辑原始迁移脚本,然后删除并重新加载数据库
  • 最终,您可能不想在生产环境中运行迁移,而只是加载完成的架构。
  • 或者您可以在投入生产之前“压缩”迁移脚本。
  • 有趣……这是怎么回事?

标签: ruby-on-rails migration


【解决方案1】:

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

这是一种久经考验且值得信赖的模式,通常在更广泛的 ORM 社区中使用。

【讨论】:

    【解决方案2】:

    到目前为止,我同意 cmets。迁移的想法是在您想要添加新字段时轻松地灵活调整您的数据模式以适应您的应用程序。这是一个简单而漂亮的系统。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-07-27
      • 1970-01-01
      • 2021-08-30
      • 1970-01-01
      • 1970-01-01
      • 2013-02-16
      • 1970-01-01
      • 2019-03-26
      • 2020-02-01
      相关资源
      最近更新 更多