Rake 不会回滚迁移,参数数量错误(1 代表 0)

Posted

技术标签:

【中文标题】Rake 不会回滚迁移,参数数量错误(1 代表 0)【英文标题】:Rake won't rollback migrations, wrong number of arguments (1 for 0) 【发布时间】:2016-06-03 13:29:45 【问题描述】:

我有一个包含几张表的项目,仍处于早期开发阶段。我需要对迁移进行一些更改,并希望回滚以正确执行此操作。这些都是微小的更改,我更愿意直接编辑迁移而不是创建更改迁移。

当我运行 rake db:rollback 时,出现以下异常:

wrong number of arguments (1 for 0)/Users/mmo/.rvm/gems/ruby-2.2.4/gems/activerecord-4.2.5/lib/active_record/migration.rb:492:in `initialize'

这个数据库是全新的——我刚刚完成了rake db:drop db:migrate

rake db:migrate:status 显示:

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20151229013054  Create courses
   up     20151229013055  Create races
   up     20151229013326  Create events
   up     20151229013400  Create countries
   up     20151229013424  Create participants
   up     20151229013616  Create efforts
   up     20151229013622  Create locations
   up     20151229013757  Create splits
   up     20151229013938  Create split times
   up     20151229014302  Create users
   up     20160129060100  Create interests
   up     20160131195951  Create ownerships

Gemfile 看起来像这样:

source 'https://rubygems.org'
ruby '2.2.4'
gem 'rails', '4.2.5'
gem 'sqlite3'
gem 'responders', '~> 2.0'
gem 'mysql2', '~> 0.3.18'
gem 'sass-rails', '~> 5.0.4'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'jbuilder', '~> 2.0'
gem 'kaminari'
gem 'turbolinks'
group :development, :test do
  gem 'byebug'
end
group :development do
  gem 'web-console', '~> 2.0'
  gem 'spring'
end
gem 'bootstrap-sass'
gem 'high_voltage'
gem 'omniauth'
gem 'omniauth-facebook'
gem 'devise'
gem 'pundit'
gem 'rails_apps_pages'
gem 'therubyracer', :platform=>:ruby
gem 'ar-audit-tracer'
gem 'oj'
gem 'alchemist'
group :development do
  gem 'better_errors'
  gem 'foreman'
  gem 'rails_layout'
end
group :development, :test do
  gem 'pry-rails'
  gem 'pry-rescue'
  gem 'rubocop', '~> 0.36'
  gem 'rspec', '~> 3.4'
  gem 'rspec-rails', '~> 3.0'
end

任何想法都将不胜感激。

编辑:这里是 --trace 结果:

$rake db:migrate --trace
** Invoke db:_dump (first_time)
** Execute db:_dump
** Invoke db:schema:dump (first_time)
** Invoke environment
** Invoke db:load_config
** Execute db:schema:dump

$rake db:rollback --trace
** Invoke db:rollback (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:rollback

最后一件事:我尝试了rake db:drop db:create,然后运行了第一次迁移 (rake db:migrate VERSION=20151229013054)。即使那样,我也无法回滚那个单一的迁移。我得到同样的错误。

【问题讨论】:

这可能会有所帮助 - ***.com/questions/27139007/… 尝试检查错误rake db:migrate --trace的踪迹 @usmanali,添加了跟踪结果。 @SriHarshaKappala,我读过那篇文章,很有趣,但它并没有帮助我找到解决这个问题的方法。 【参考方案1】:

我正在使用“ar-audit-tracer”gem 对我的记录进行自动用户标记。原来这个 gem 用 rake db:rollback 产生了一个问题。当我注释掉 gem 时,我可以很好地回滚。不确定这是一般问题还是仅针对我的情况。

【讨论】:

【参考方案2】:

试一试 连续剧:

rake db:drop :- drops the database for the current env
rake db:create :- creates the database for the current env
rake db:setup :- runs db:schema:load, db:seed

【讨论】:

我试过这个,但在尝试回滚时遇到了同样的错误。【参考方案3】:

您已删除并迁移了数据库。您应该重新创建一个。

rake db:drop

rake db:create db:migrate

Please go through this answer

migration.rb 中的第 492 行,

 <tt>ActiveRecord::Migration::CommandRecorder</tt>.

所以你应该再次创建数据库。

【讨论】:

我试过 rake db:drop 然后 rake db:create 和 rake db:migrate。这样做后我仍然无法回滚迁移。 运行此命令rake db:rollback:status 并查看回滚中实际发生的情况。

以上是关于Rake 不会回滚迁移,参数数量错误(1 代表 0)的主要内容,如果未能解决你的问题,请参考以下文章

rake db:mysql2 gem 的迁移错误 - 未加载库:libssl.1.0.0.dylib

为啥 rake db:rollback 回滚三步?

如何使用 rake db:migrate 仅回滚一步

rake 中止的数据库将不会迁移

使用 rake db:migrate 迁移数据不会改变它

在to_json方法中Rails“参数数量错误(1代表0)”[重复]