Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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 rails迁移的回滚失败_Ruby On Rails_Ruby On Rails 3_Migration_Ruby On Rails 3.1_Rails Migrations - Fatal编程技术网

Ruby on rails rails迁移的回滚失败

Ruby on rails rails迁移的回滚失败,ruby-on-rails,ruby-on-rails-3,migration,ruby-on-rails-3.1,rails-migrations,Ruby On Rails,Ruby On Rails 3,Migration,Ruby On Rails 3.1,Rails Migrations,我在编辑rails迁移时出错(我使用的是rails 3.1.0rc5)。所以我纠正了它,并尝试执行rakedb:rollback,然后执行rakedb:migrateddb:test:prepare。但由于某种原因,回滚失败了。以下是迁移的回滚部分: def down drop_table :assets end 这是来自db:rollback的响应: == CreateAssets: reverting ===================================

我在编辑rails迁移时出错(我使用的是rails 3.1.0rc5)。所以我纠正了它,并尝试执行
rakedb:rollback
,然后执行
rakedb:migrateddb:test:prepare
。但由于某种原因,回滚失败了。以下是迁移的回滚部分:

  def down
    drop_table :assets
  end
这是来自
db:rollback
的响应:

==  CreateAssets: reverting ===================================================
rake aborted!
An error has occurred, this and all later migrations canceled:

ActiveRecord::IrreversibleMigration

Tasks: TOP => db:rollback
(See full trace by running task with --trace)
所以我只是手动删除了数据库中的资产表(我只是使用sqlite3数据库),注释掉了
drop\u table:assets
行,然后再次运行
db:rollback

==  CreateAssets: reverting ===================================================
-- drop_table("assets")
rake aborted!
An error has occurred, this and all later migrations canceled:

SQLite3::SQLException: no such table: assets: DROP TABLE "assets"

Tasks: TOP => db:rollback
(See full trace by running task with --trace)
为什么它要放弃资产表?我注释掉了(实际上后来删除了)迁移中的
drop\u table:assets
行。我甚至做了一个
grep-r assets
来查看rails可能从何处获得drop命令,但找不到任何东西

所以我的问题是如何重新运行迁移?我很好奇rails是从哪里得到下降命令的


更新:事实证明,rails 3.1在回滚时实际上没有查看迁移类“
down
方法!它查看
change
方法的迁移命令并反转它们。这就是为什么
rake db:rollback
即使在我删除
drop\u table:assets
指令后仍试图删除assets表的原因!我是如何解决这个问题的,我将
change
方法更改为旧的rails 3.0样式
up
方法。然后rails查看了我从中删除的
drop\u table
命令的
down
方法,回滚成功。

迁移随着最新rails的出现发生了相当大的变化,尤其是反向迁移。
我认为这将为您提供所需的信息和选项


顺便说一句,我有很多问题与3.1。rc候选者(如rc4、rc5),现在必须保持在3.0.9才能获得稳定的新应用。

edgerails的那篇文章为我解决了这个问题!我将用结果更新我的问题。有一个类似的情况(Rails 3.2),用“up”替换“change”对我也很有效。