ruby-on-rails - 如何跳过失败的迁移? ( rake 数据库:migrate)

标签 ruby-on-rails rake rails-migrations

我似乎找不到允许我跳过迁移的选项或任何内容。

我知道你在想什么:“你永远不应该这样做......”

我需要跳过对开发数据库中不存在的特定用户记录进行更改的迁移。我不想更改迁移,因为它不是我应该使用的源的一部分。有没有办法跳过迁移或跳过失败的迁移?

提前致谢!

最佳答案

我认为你应该修复有问题的迁移,使其不那么脆弱,我猜有几个 if陈述,也许还有 rescue就足够了。

但是,如果确实无法修复迁移,您可以通过各种方式来伪造它。首先,你可以直接注释掉迁移方法,运行 rake db:migrate ,然后取消注释(或恢复)有问题的迁移。

您也可以在数据库中伪造它,但不建议这样做,除非您知道自己在做什么并且不介意在(不可避免地)犯错误时手动修补。您的数据库中有一个名为 schema_migrations 的表有一个 varchar(255)名为 version 的列;该表由 db:migrate 使用跟踪已应用的迁移。您需要做的就是插入适当的 version值和rake db:migrate会认为迁移已经完成。找到有问题的迁移文件:

db/migrate/99999999999999_XXXX.rb

然后进入您的数据库并说:

insert into schema_migrations (version) values ('99999999999999');

哪里99999999999999当然,是迁移文件名中的数字。然后运行rake db:migrate应该跳过该迁移。

我会在第三个选项之前选择第二个选项,为了完整性,我只包含“hack schema_versions”选项。

关于ruby-on-rails - 如何跳过失败的迁移? ( rake 数据库:migrate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8810732/

相关文章:

ruby-on-rails - Rails - 如何将变量插入正则表达式 (Regex),例如 assert_match

ruby-on-rails - Redmine 安装不适用于 apache 乘客

ruby-on-rails - rake db :structure:dump 上的 nil nilclass 的未定义方法 'exitstatus'

ruby - rake 在 Rails4 中不起作用

ruby-on-rails - rake 数据库 :create:all FATAL : password authentication failed

ruby-on-rails - 如何将列类型从整数更改为小数,小数点后有一个字母?

ruby-on-rails - 在 Rails 迁移中添加对非整数列的引用

mysql - rails : displaying an image from a blob field in a database

ruby-on-rails - Devise 和 OmniAuth 如何协同工作?

ruby-on-rails - 未定义的方法 `link_to_remote' 在 MiniTest 中用于 application_helper 测试