这是我的Rakefile
require 'bundler'
Bundler.setup
require 'active_record'
require 'sqlite3'
require 'yaml'
require 'logger'
task :migrate => :environment do
ActiveRecord::Migrator.migrate('db/migrate', ENV["VERSION"] ? ENV["VERSION"].to_i : nil )
end
task :environment do
ActiveRecord::Base.establish_connection(YAML::load(File.open('config/database.yaml'))['development'])
ActiveRecord::Base.logger = Logger.new(STDOUT)
end
当我执行任务时,我收到了这个错误:
rake aborted!
/usr/local/rvm/gems/ruby-2.0.0-p0@ta/gems/activerecord-2.3.18/lib/active_record/base.rb:2449: warning: already initialized constant Class::VALID_FIND_OPTIONS
/usr/local/rvm/gems/ruby-2.0.0-p0@ta/gems/activerecord-2.3.18/lib/active_record/base.rb:2449: warning: previous definition of VALID_FIND_OPTIONS was here
undefined method `alias_method_chain' for #<Class:0x00000001606340>
/usr/local/rvm/gems/ruby-2.0.0-p0@ta/gems/activerecord-2.3.18/lib/active_record/base.rb:2002:in `method_missing'
/usr/local/rvm/gems/ruby-2.0.0-p0@ta/gems/activerecord-2.3.18/lib/active_record/validations.rb:387:in `block in included'
/usr/local/rvm/gems/ruby-2.0.0-p0@ta/gems/activerecord-2.3.18/lib/active_record/validations.rb:386:in `class_eval'
/usr/local/rvm/gems/ruby-2.0.0-p0@ta/gems/activerecord-2.3.18/lib/active_record/validations.rb:386:in `included'
/usr/local/rvm/gems/ruby-2.0.0-p0@ta/gems/activerecord-2.3.18/lib/active_record/base.rb:3210:in `include'
/usr/local/rvm/gems/ruby-2.0.0-p0@ta/gems/activerecord-2.3.18/lib/active_record/base.rb:3210:in `block in <module:ActiveRecord>'
/usr/local/rvm/gems/ruby-2.0.0-p0@ta/gems/activerecord-2.3.18/lib/active_record/base.rb:3208:in `class_eval'
/usr/local/rvm/gems/ruby-2.0.0-p0@ta/gems/activerecord-2.3.18/lib/active_record/base.rb:3208:in `<module:ActiveRecord>'
/usr/local/rvm/gems/ruby-2.0.0-p0@ta/gems/activerecord-2.3.18/lib/active_record/base.rb:5:in `<top (required)>'
/home/marco/desenv/technical_analysis/Rakefile:14:in `block in <top (required)>'
/usr/local/rvm/gems/ruby-2.0.0-p0@ta/gems/rake-10.0.4/lib/rake/task.rb:246:in `call'
/usr/local/rvm/gems/ruby-2.0.0-p0@ta/gems/rake-10.0.4/lib/rake/task.rb:246:in `block in execute'
我有一些调试和一些测试... 然后我转移到3.2.13 版本的活动记录,并且所有工作都按预期工作。我没有找到3.2.18版本的任何文档......
我不介意使用3.2.13版本,但我很好奇。
答案 0 :(得分:3)
首先,您使用的是ActiveRecord 2.3.18,而不是3.2.18(据我所知,后者不存在)。 ActiveRecord 2.3已经相当老了,我不相信它与你正在使用的Ruby 2.0兼容。
但我认为,核心问题是in Rails 2.2-2.3,alias_method_chain
已移至ActiveSupport
模块,然后在3.0中移回Module
。你没有在你的任务中包含ActiveSupport
,我认为这是导致问题的原因。
所以我认为快速修复只是require "active_support"
。