我正在将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.rb
,002_add_some_other_model.rb
而不是20120209182512_add_some_model.rb
。
有没有人有这方面的经验?我该如何解决这个问题?
答案 0 :(得分:7)
我认为您应该重新启动您的迁移,删除您拥有的所有迁移,并使用当前模型的定义创建新的迁移。请参阅this migration作为开始示例。
答案 1 :(得分:2)
即使在最新的Rails 3应用程序中,也不建议运行所有迁移来设置新数据库。这在db / schema.rb中解释:
请注意,此schema.rb定义是您的权威来源 数据库架构。如果需要在另一个上创建应用程序数据库 系统,您应该使用db:schema:load,而不是运行所有迁移 从头开始。后者是一种有缺陷且不可持续的方法(迁移越多 你会积累,它会跑得越慢,发生问题的可能性越大。
答案 2 :(得分:0)
我会从头开始创建新的迁移,而不是建议的内容。 以当前状态启动所有模型并为每个模型创建新的迁移,这样您以后仍可以使用迁移的强大功能,例如向表中添加列或更改列类型。
如果您为所有模型创建单一迁移,like has been suggested您将在迁移名称中放弃模型轨道。
这只是另一种方式,反映了我自己的愿景。