如何在不删除所有较新的迁移的情况下再次运行迁移?

时间:2013-06-07 09:47:46

标签: ruby-on-rails ruby devise rake

我刚安装了设备,所以除了一个用户(我)之外,表上没有任何数据。

我再次重新做数据库所以我放弃了所有这些。我做了rails g scaffold来生成6个新模型和控制器并且做了rake db:migrate

在我的/db/migrate目录中,我有一个文件名为20130603211907_devise_create_users.rb

的设计文件

问题在于:如果我rake db:migrate:down VERSION=20130603211907,它将删除所有新的迁移。

如何重新运行迁移,而不删除所有较新的迁移?

5 个答案:

答案 0 :(得分:42)

rake db:migrate:redo VERSION=xxxxxxx

它将运行向下然后向上运行。您可以暂时注释掉向下步骤。

答案 1 :(得分:7)

感谢大家的帮助。这对我有用:

警告:这些命令将删除数据库中的所有数据!

rake db:drop
rake db:create
rake db:migrate

答案 2 :(得分:6)

如果您在本地进行开发,从模型中删除所有数据并不会有什么坏处,您只需drop您的数据库,然后create&从头开始migrate

Purge or recreate a Ruby on Rails database

答案 3 :(得分:6)

您可以致电rake db:migrate:redo VERSION=20130603211907,这将重新运行指定的版本。

此外,如果您的迁移只应在上传迁移链时运行(例如数据转换,复制等),则可以指定

def up 
  do_something
end

和def down(下降),def change(双向)方法。

要暂时禁用迁移,只需将方法def up重命名为def up_,处理迁移链时将忽略该方法。

答案 4 :(得分:3)

rake db:migrate:up VERSION=20090408054532

这会将所有文件迁移到VERSION = 20090408054532

结帐Run a single migration file