如何使用 rake db:migrate 仅回滚一步
Posted
技术标签:
【中文标题】如何使用 rake db:migrate 仅回滚一步【英文标题】:How to rollback just one step using rake db:migrate 【发布时间】:2011-05-20 03:58:53 【问题描述】:在db/migrate
文件夹中添加迁移文件并运行rake db:migrate
后,我想回到上一步,我认为使用VERSION=n
是正确的方法,但我不知道正确的方法要使用的 n 值。有什么命令可以查看当前的 n 值吗?
如果有人能提供有关如何使用rake db:migrate
的完整说明,那就太好了。
【问题讨论】:
【参考方案1】:初学者
rake db:rollback
会让你后退一步
然后
rake db:rollback STEP=n
将回滚n
迁移,其中n
是您要回滚的最近迁移的数量。
更多参考here。
【讨论】:
【参考方案2】:回滚最近的迁移:
rake db:rollback
回滚 n
最近的迁移:
rake db:rollback STEP=n
您可以在Rails Guide for running migrations 上找到有关使用 Rails 迁移任务进行 rake 的完整说明。
这里还有一些:
rake db:migrate
- 运行所有尚未运行的迁移
rake db:migrate VERSION=20080906120000
- 运行所有必要的迁移(向上或向下)以获取给定版本
rake db:migrate RAILS_ENV=test
- 在给定环境中运行迁移
rake db:migrate:redo
- 回滚一次迁移并再次运行它
rake db:migrate:redo STEP=n
- 回滚最后的 n
迁移并再次运行它们
rake db:migrate:up VERSION=20080906120000
- 为给定的迁移运行 up
方法
rake db:migrate:down VERSION=20080906120000
- 为给定的迁移运行 down
方法
并回答有关从何处获得迁移版本号的问题:
版本是迁移文件名的数字前缀。为了 例如,迁移到版本 20080906120000 运行
$ rake db:migrate VERSION=20080906120000
(来自 Rails 指南中的 Running Migrations)
【讨论】:
当 rake db:rollback 无法回滚最近的迁移时,我不得不使用 rake db:migrate VERSION=最好的方法是使用 down 或 up 再次运行特定迁移(在 rails 4 中。它的变化)
rails db:migrate:up VERSION=timestamp
现在你如何获得时间戳。 走这条路
/db/迁移
确定要还原的迁移文件。从该文件名中选择时间戳。
【讨论】:
虽然这不能回答问题,但它确实是最好的方法。逐步回滚可能会导致错误,尤其是在团队中处理软件时。【参考方案4】:如果版本是20150616132425
,则使用:
rails db:migrate:down VERSION=20150616132425
【讨论】:
【参考方案5】:其他人已经回答了您如何回滚,但您也询问了如何识别迁移的版本号。
rake db:migrate:status
列出了您的迁移版本、名称和状态(向上或向下)
您还可以找到迁移文件,文件名中包含时间戳,即版本号。迁移位于文件夹中:/db/migrate
【讨论】:
顺便说一下,如果您运行 status 命令,您可能会看到如下行: ********** NO FILE ********** 这些迁移不是如果您使用 git,则存在于您当前的分支中。【参考方案6】: try
$result=DB::table('users')->whereExists(function ($Query)
$Query->where('id','<','14162756');
$Query->whereBetween('password',[14162756,48384486]);
$Query->whereIn('id',[3,8,12]);
);
catch (\Exception $error)
Log::error($error);
DB::rollBack(1);
return redirect()->route('bye');
【讨论】:
此问题已包含多个答案和一个已接受的答案。您能否解释(通过编辑您的答案)您的答案与其他答案的不同之处?也知道从长远来看,仅代码的答案是没有用的。以上是关于如何使用 rake db:migrate 仅回滚一步的主要内容,如果未能解决你的问题,请参考以下文章
为啥 rake db:migrate:reset 未在 rake -T 中列出?
兼容性问题? rake db:migrate - 参数数量错误(1 代表 0)