2013-07-05 55 views
1

我正在做一个宝石。Rubygems加载错误版本的宝石

尽管指定了activemodel的版本,但gem实际上使用的是activemodel 4.0.0。 从4.0.0开始,构造函数只接受一个参数。所以,当我尝试通过在第二个参数,我得到的参数错误:

/Users/me/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/activerecord-4.0.0/lib/active_record/core.rb:180:in `initialize': wrong number of arguments (2 for 1) (ArgumentError) 

为什么使用加载ActiveModel了RubyGems的版本不对?

我指定的gemspec以下依赖性:

gem.add_dependency "log4r" 
    gem.add_dependency "deep_end" 
    gem.add_dependency "google_drive" 

    gem.add_development_dependency 'rake' 
    gem.add_development_dependency 'rspec' 
    gem.add_development_dependency "activemodel", "3.2.13" 
    gem.add_development_dependency "activerecord", "3.2.13" 
    gem.add_development_dependency "activesupport", "3.2.13" 

我Gemfile.lock的是这样的:

PATH 
    remote: . 
    specs: 
    drive_time (0.0.1) 
     deep_end 
     google_drive 
     log4r 

GEM 
    remote: https://rubygems.org/ 
    specs: 
    activemodel (3.2.13) 
     activesupport (= 3.2.13) 
     builder (~> 3.0.0) 
    activerecord (3.2.13) 
     activemodel (= 3.2.13) 
     activesupport (= 3.2.13) 
     arel (~> 3.0.2) 
     tzinfo (~> 0.3.29) 
    activesupport (3.2.13) 
     i18n (= 0.6.1) 
     multi_json (~> 1.0) 
    arel (3.0.2) 
    builder (3.0.4) 
    deep_end (0.0.1) 
     log4r 
    diff-lcs (1.2.4) 
    faraday (0.8.7) 
     multipart-post (~> 1.1) 
    google_drive (0.3.6) 
     nokogiri (>= 1.4.4, != 1.5.2, != 1.5.1) 
     oauth (>= 0.3.6) 
     oauth2 (>= 0.5.0) 
    httpauth (0.2.0) 
    i18n (0.6.1) 
    jwt (0.1.8) 
     multi_json (>= 1.5) 
    log4r (1.1.10) 
    mini_portile (0.5.0) 
    multi_json (1.7.7) 
    multi_xml (0.5.4) 
    multipart-post (1.2.0) 
    nokogiri (1.6.0) 
     mini_portile (~> 0.5.0) 
    oauth (0.4.7) 
    oauth2 (0.9.2) 
     faraday (~> 0.8) 
     httpauth (~> 0.2) 
     jwt (~> 0.1.4) 
     multi_json (~> 1.0) 
     multi_xml (~> 0.5) 
     rack (~> 1.2) 
    rack (1.5.2) 
    rake (10.1.0) 
    rspec (2.13.0) 
     rspec-core (~> 2.13.0) 
     rspec-expectations (~> 2.13.0) 
     rspec-mocks (~> 2.13.0) 
    rspec-core (2.13.1) 
    rspec-expectations (2.13.0) 
     diff-lcs (>= 1.1.3, < 2.0) 
    rspec-mocks (2.13.1) 
    tzinfo (0.3.37) 

PLATFORMS 
    ruby 

DEPENDENCIES 
    activerecord (= 3.2.13) 
    activesupport (= 3.2.13) 
    drive_time! 
    rake 
    rspec 

我还可以得到以下几点:

$ bundle show activemodel #/Users/pedr/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/activemodel-3.2.13 

回答

0

在尝试了我能想到的所有事情之后,以下方法已经完成了这项技巧(尽管它是否已经永久解决了问题,只有时间才能说明问题)。

  1. $ gem clean
  2. 卸载rbenv
  3. 安装rbenv
  4. 删除Gemfile.lock的
  5. $ bundle
1

确保你使用bundle exec运行你的代码,否则ruby会将defa最好使用已安装的最新版本的gem。

使用bundle exec将禁止加载任何不在您的包中的宝石,并应更正您的问题。查看manpage了解更多详情。

希望这会有所帮助!

+0

这不是在这种情况下的问题,但它是绝好的建议。 – Undistraction