2013-04-13 18 views
0

這是我的Rakefile未定義的方法`alias_method_chain'無軌遷移

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/[email protected]/gems/activerecord-2.3.18/lib/active_record/base.rb:2449: warning: already initialized constant Class::VALID_FIND_OPTIONS 
/usr/local/rvm/gems/[email protected]/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/[email protected]/gems/activerecord-2.3.18/lib/active_record/base.rb:2002:in `method_missing' 
/usr/local/rvm/gems/[email protected]/gems/activerecord-2.3.18/lib/active_record/validations.rb:387:in `block in included' 
/usr/local/rvm/gems/[email protected]/gems/activerecord-2.3.18/lib/active_record/validations.rb:386:in `class_eval' 
/usr/local/rvm/gems/[email protected]/gems/activerecord-2.3.18/lib/active_record/validations.rb:386:in `included' 
/usr/local/rvm/gems/[email protected]/gems/activerecord-2.3.18/lib/active_record/base.rb:3210:in `include' 
/usr/local/rvm/gems/[email protected]/gems/activerecord-2.3.18/lib/active_record/base.rb:3210:in `block in <module:ActiveRecord>' 
/usr/local/rvm/gems/[email protected]/gems/activerecord-2.3.18/lib/active_record/base.rb:3208:in `class_eval' 
/usr/local/rvm/gems/[email protected]/gems/activerecord-2.3.18/lib/active_record/base.rb:3208:in `<module:ActiveRecord>' 
/usr/local/rvm/gems/[email protected]/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/[email protected]/gems/rake-10.0.4/lib/rake/task.rb:246:in `call' 
/usr/local/rvm/gems/[email protected]/gems/rake-10.0.4/lib/rake/task.rb:246:in `block in execute' 

我有一些調試和一些測試... 然後我轉移到3.2.13版本的活動記錄,並按預期工作。我沒有找到3.2.18版本的任何文檔...

我不介意使用3.2.13版本,但我對此很好奇。

回答

3

首先,你使用的是ActiveRecord 2.3.18,而不是3.2.18(據我所知,後者不存在)。 ActiveRecord 2.3變得相當老舊,我不相信它與你正在使用的Ruby 2.0兼容。

但核心的問題,我認爲,是in Rails 2.2-2.3alias_method_chain被轉移到ActiveSupport模塊,移回Module在3.0之前。你的任務中沒有包括ActiveSupport,我認爲這就是導致問題的原因。

所以我認爲快速解決只是爲了require "active_support"

+0

我有類似的問題。 ('未定義的方法'alias_method_chain'',紅寶石1.8.7和導軌2.3.8)。我嘗試讓'alias_method_chain'在解釋器中工作,首先使用'require'rubygems「'和'require」active_support「',但沒有成功 - 仍然是'未定義的方法'。亂七八糟,發現用簡單的方法'test1'和'test2'嘗試'ActiveSupport.alias_method_chain:test1,:test2'仍然失敗,但給出了一個不同的錯誤:'未定義的方法'test1_with_test2'用於模塊'ActiveSupport'。 – Erhannis

相關問題