最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

Rails执行数据库回滚时报错:ActiveRecord::IrreversibleMigrationexceptio

来源:懂视网 责编:小采 时间:2020-11-09 12:48:59
文档

Rails执行数据库回滚时报错:ActiveRecord::IrreversibleMigrationexceptio

Rails执行数据库回滚时报错:ActiveRecord::IrreversibleMigrationexceptio:最近在rails3.2下修改数据库表的字段,然后想回滚取消操作,但是在执行rake db:rollback命令时,出现错误: 最近在rails3.2下修改数据库表的字段,然后想回滚取消操作,但是在执行rake db:rollback命令时,出现错误: rake aborted!An e
推荐度:
导读Rails执行数据库回滚时报错:ActiveRecord::IrreversibleMigrationexceptio:最近在rails3.2下修改数据库表的字段,然后想回滚取消操作,但是在执行rake db:rollback命令时,出现错误: 最近在rails3.2下修改数据库表的字段,然后想回滚取消操作,但是在执行rake db:rollback命令时,出现错误: rake aborted!An e

最近在rails3.2下修改数据库表的字段,然后想回滚取消操作,但是在执行rake db:rollback命令时,出现错误:

最近在rails3.2下修改数据库表的字段,然后想回滚取消操作,但是在执行rake db:rollback命令时,出现错误:

rake aborted!
An error has occurred, all later migrations canceled:
ActiveRecord::IrreversibleMigration/usr/local/rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.14/lib/active_record/migration/command_recorder.rb:42:in `block in inverse'

我的migration内容如下:

class ChangeVmTempColumns < ActiveRecord::Migration
def change
change_table :vm_temps do |t|
t.change :disksize, :integer, :limit => 8
t.change :mem_total, :integer, :limit => 8
end
end
end

上网查了资料,貌似原因在于对数据库表的字段类型进行修改时,数据库中的数据也会有变化,这样在回滚时不能修改这些变动的数据

《The migration that cannot be undone: Irreversible Migration》文章中举了一个例子:当我们在migration中change_column由integer变为string时是可以的,但是如果反过来,字段类型由string变为integer,我们就不能reverse this migration。正好和我这种情况一致!

Stackoverflow上,这个问题《ActiveRecord::IrreversibleMigration exception when reverting migration》提供了一个解决办法:把self.change改为self.up和self.down方法。

修改后的migration:

class ChangeVmTempColumns < ActiveRecord::Migration
def self.up
change_table :vm_temps do |t|
t.change :disksize, :integer, :limit => 8
t.change :mem_total, :integer, :limit => 8
end
end

def self.up
change_table :vm_temps do |t|
t.change :disksize, :string
t.change :mem_total, :string
end
end
end

执行rake db:rollback,成功!

原因:我原来认为在Rails中,self.change方法直接把self.up和self.down两个综合在一起,执行和回滚只用一个change方法就可以,但是经过这个例子,我认为self.change方法执行回滚时,只能采用默认的方式执行,一旦出现上述类型转换的问题就无法正常执行;但是self.down方法执行回滚时,会强制执行self.down中的语句,这样就不会出现irreversible migration的错误。

Ubuntu下Apache服务器安装以及使用Passenger插件部署Rails应用

Ubuntu下搭建Ruby On Rails

《Web开发敏捷之道应用Rails进行敏捷Web开发(原书第4版)》.((美)Sam Ruby).[PDF]+源代码

Rails 的详细介绍:请点这里
Rails 的下载地址:请点这里

本文永久更新链接地址:

linux

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

Rails执行数据库回滚时报错:ActiveRecord::IrreversibleMigrationexceptio

Rails执行数据库回滚时报错:ActiveRecord::IrreversibleMigrationexceptio:最近在rails3.2下修改数据库表的字段,然后想回滚取消操作,但是在执行rake db:rollback命令时,出现错误: 最近在rails3.2下修改数据库表的字段,然后想回滚取消操作,但是在执行rake db:rollback命令时,出现错误: rake aborted!An e
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top