从Rails 1.2.3应用程序升级时如何更新迁移?

时间:2012-02-10 14:31:05

标签: ruby-on-rails ruby-on-rails-3 rails-migrations

我正在将Rails 1.2.3应用更新为3.2.1。

我正在试图弄清楚如何更新迁移结构以与最新版本的Rails兼容,因此理想情况下,您可以在设置应用时运行rake db:migrate。目前,我通过执行rake db:migrate:up VERSION=[version_number]我需要运行的任何迁移来解决这个问题。如果我只运行rake db:migrate,它会尝试从头开始重新运行所有迁移并停止(因为这些迁移已经在我拥有的db转储中运行)。

应用中的迁移看起来像001_add_some_model.rb002_add_some_other_model.rb而不是20120209182512_add_some_model.rb

有没有人有这方面的经验?我该如何解决这个问题?

3 个答案:

答案 0 :(得分:7)

我认为您应该重新启动您的迁移,删除您拥有的所有迁移,并使用当前模型的定义创建新的迁移。请参阅this migration作为开始示例。

答案 1 :(得分:2)

即使在最新的Rails 3应用程序中,也不建议运行所有迁移来设置新数据库。这在db / schema.rb中解释:

  

请注意,此schema.rb定义是您的权威来源   数据库架构。如果需要在另一个上创建应用程序数据库   系统,您应该使用db:schema:load,而不是运行所有迁移   从头开始。后者是一种有缺陷且不可持续的方法(迁移越多   你会积累,它会跑得越慢,发生问题的可能性越大。

答案 2 :(得分:0)

我会从头开始创建新的迁移,而不是建议的内容。 以当前状态启动所有模型并为每个模型创建新的迁移,这样您以后仍可以使用迁移的强大功能,例如向表中添加列或更改列类型。

如果您为所有模型创建单一迁移,like has been suggested您将在迁移名称中放弃模型轨道。

这只是另一种方式,反映了我自己的愿景。