为什么我的rake调用导致’未定义的方法`source_index`’错误?

我试图运行bundle exec rake db:migrate然后遇到以下错误。

 bundle exec rake db:migrate --trace ** Invoke db:migrate (first_time) ** Invoke environment (first_time) ** Execute environment rake aborted! undefined method `source_index' for Gem:Module C:/Ruby193/lib/ruby/gems/1.9.1/gems/rails-2.3.17/lib/rails/gem_dependency.rb:21:in `add_frozen_gem_path' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rails-2.3.17/lib/initializer.rb:298:in `add_gem_load_paths' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rails-2.3.17/lib/initializer.rb:132:in `process' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rails-2.3.17/lib/initializer.rb:113:in `run' C:/Program Files/chiliproject-3.7.0/config/environment.rb:42:in `' C:/Ruby193/lib/ruby/gems/1.9.1/gems/activesupport-2.3.17/lib/active_support/dependencies.rb:182:in `require' C:/Ruby193/lib/ruby/gems/1.9.1/gems/activesupport-2.3.17/lib/active_support/dependencies.rb:182:in `block in require' C:/Ruby193/lib/ruby/gems/1.9.1/gems/activesupport-2.3.17/lib/active_support/dependencies.rb:547:in `new_constants_in' C:/Ruby193/lib/ruby/gems/1.9.1/gems/activesupport-2.3.17/lib/active_support/dependencies.rb:182:in `require' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rails-2.3.17/lib/tasks/misc.rake:4:in `block in ' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/task.rb:228:in `call' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/task.rb:228:in `block in execute' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/task.rb:223:in `each' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/task.rb:223:in `execute' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/task.rb:166:in `block in invoke_with_call_chain' C:/Ruby193/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/task.rb:159:in `invoke_with_call_chain' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/task.rb:187:in `block in invoke_prerequisites' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/task.rb:185:in `each' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/task.rb:185:in `invoke_prerequisites' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/task.rb:165:in `block in invoke_with_call_chain' C:/Ruby193/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/task.rb:159:in `invoke_with_call_chain' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/task.rb:152:in `invoke' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/application.rb:143:in `invoke_task' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/application.rb:101:in `block (2 levels) in top_level' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/application.rb:101:in `each' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/application.rb:101:in `block in top_level' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/application.rb:110:in `run_with_threads' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/application.rb:95:in `top_level' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/application.rb:73:in `block in run' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/application.rb:160:in `standard_exception_handling' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/lib/rake/application.rb:70:in `run' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rake-10.0.3/bin/rake:33:in `' C:/Ruby193/bin/rake:23:in `load' C:/Ruby193/bin/rake:23:in `' Tasks: TOP => db:migrate => environment 

这是遇到错误的部分:

  def self.add_frozen_gem_path @@paths_loaded ||= begin source_index = Rails::VendorGemSourceIndex.new(Gem.source_index) Gem.clear_paths Gem.source_index = source_index # loaded before us - we can't change them, so mark them Gem.loaded_specs.each do |name, spec| @@framework_gems[name] = spec end true end end 

我知道这似乎是基本的,但我一直在网上搜索,似乎无法找到答案。

问题完全解决了未定义的方法`source_index’对于Gem:Module(NoMethodError)只有简单的行

 gem update --system 1.8.25 

这个: 未定义的方法`source_index’用于Gem:Module(NoMethodError)说

Gem.source_index已被弃用了一段时间,但由于Rails 2.3除了关键安全补丁之外没有获得任何更新,因此永远不会得到修复。 RubyGems v2.0最终删除了该方法。 降级到2.0.0之前的任何rubygems版本,如1.8.25,以便暂时恢复function。

所以我现在的猜测是Rails 2.3与当前的RubyGems冲突。 我这样做了:

  1. gem install ruby​​gems-update -v’1.8.25′
  2. gem卸载rubygems-update#并删除了其他版本。

没有什么区别,只是分享我的发现。

好的,我一整天都在搞乱这个,最后通过以下方式为我工作:

  1. 使RVM保持最新状态

    rvm得到了头

  2. 将ruby版本更改为1.9.3

    • 在Gemfile中更新
    • 更新.rvmrc文件
  3. 将Rails更新到最新的2.3版本

    • 在Gemfile中更新
    • 环境中的更新.rb

那一切都跑了

bundle exec rake db:migrate

Rails 2.3中发生了一些奇怪的冲突,其中包含最新的ruby gems和一个未知的x因子,其中可能包含ruby 1.9.1和1.9.2中的问题?

来自ApiDock :

不推荐使用此类或在最新的稳定版本上移动。 此处显示了最新的现有版本(v2.3.8)。

在这个问题中,使用了Rails版本2.3.17,并且由于被弃用,它会出错。 如果它是2.3.8,它可以工作。

将gem更新为1.8.25

 gem update --system 1.8.25 

这可能对你有所帮助。