Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在不删除所有较新迁移的情况下再次运行迁移?_Ruby On Rails_Ruby_Devise_Rake - Fatal编程技术网

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

Ruby on rails 如何在不删除所有较新迁移的情况下再次运行迁移?,ruby-on-rails,ruby,devise,rake,Ruby On Rails,Ruby,Devise,Rake,我刚刚安装了Desive,所以表中除了一个用户(我)之外没有任何数据 我又重新做了一遍数据库,所以我把它全丢了。我做了railsgscaffold来生成6个新的模型和控制器,并做了rakedb:migrate 在我的/db/migrate目录中,我有文件名为20130603211907\u designe\u create\u users.rb的designe文件 问题是:如果我做了rake db:migrate:down VERSION=20130603211907它将删除所有新的迁移 如何在

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

我又重新做了一遍数据库,所以我把它全丢了。我做了
railsgscaffold
来生成6个新的模型和控制器,并做了
rakedb:migrate

在我的
/db/migrate
目录中,我有文件名为
20130603211907\u designe\u create\u users.rb的designe文件

问题是:如果我做了
rake db:migrate:down VERSION=20130603211907
它将删除所有新的迁移


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

它将先运行向下步骤,然后运行向上步骤(此命令可以删除您的表!):

rakedb:migrate:redo VERSION=xxxxxxx


为了防止表被删除,您可以结合暂时注释下
步骤

如果您是在本地开发的,并且从模型中删除所有数据不会造成伤害,您只需
删除数据库,然后
创建
&
迁移
划痕:

这将把所有文件迁移到版本=20090408054532


结账

谢谢大家的帮助。这就是我的工作原理:

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

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

您可以调用
rake db:migrate:redo VERSION=20130603211907
,它将重新运行指定的版本。

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

def up 
  do_something
end
和def down(下降)、def change(双向)方法


要临时禁用迁移,只需将方法
def up
重命名为
def up
,它将在处理迁移链时被忽略。

在更改迁移的时间戳后,我将尝试
rake db:migrate
,看看会发生什么。哈哈,我也这么做了。我在DEV,没有人支付我的产品,所以我不会推荐任何其他方式。考虑接受对你工作的答案,而不是在你自己的答案中第二次包括解决方案;我只做了
railsdb:migrate
,它没有删除我的数据库:)只是为了更新。这比OP要求的要多得多。这是在没有任何种子数据的情况下重置数据库。基本上从零开始运行迁移。如果没有数据库备份或在生产环境中,您可能永远都不想这样做。另请查看以获得版本列表:
rake db:migrate:status
。现在是
rails db:migrate:status
,如果您使用的是rails 5+,当迁移无法轻松回滚时,这也很好,比如
change\u列
。我认为db:reset与drop、create、migrate相同,但不是。单独执行这些步骤对我很有效,并在本地纯开发人员的绿地应用程序上重新运行我修改过的迁移。这不是正确答案,与OP要求的结果有很大不同。但请注意,如果迁移已经运行,则此操作会无提示地失败。我能看到的唯一方法是在不运行向下迁移的情况下重新向上执行
up
,即注释掉所有内容,
db:migrate:down
,再次取消注释,然后按所述执行
db:migrate:up
def up 
  do_something
end