【问题标题】:undefined method `source_index' for Gem:Module (NoMethodError)Gem:Module (NoMethodError) 的未定义方法“source_index”
【发布时间】:2013-02-27 07:05:40
【问题描述】:

我正在运行 Rails 2.3.5 应用程序,并在运行脚本/服务器时显示以下内容:

./script/../config/../vendor/rails/railties/lib/rails/gem_dependency.rb:21:in `add_frozen_gem_path': undefined method `source_index' for Gem:Module (NoMethodError)
    from ./script/../config/boot.rb:60:in `load_initializer'
    from ./script/../config/boot.rb:44:in `run'
    from ./script/../config/boot.rb:17:in `boot!'
    from ./script/../config/boot.rb:123
    from script/server:2:in `require'
    from script/server:2

如果我在 boot.rb (Rails::GemDependency.add_frozen_gem_path) 中注释掉第 60 行并运行脚本/服务器,我会得到:

=> Booting WEBrick
=> Rails 2.3.5 application starting on http://0.0.0.0:3000
./script/../config/../vendor/rails/railties/lib/rails/gem_dependency.rb:21:in `add_frozen_gem_path': undefined method `source_index' for Gem:Module (NoMethodError)
    from ./script/../config/../vendor/rails/railties/lib/initializer.rb:298:in `add_gem_load_paths'
    from ./script/../config/../vendor/rails/railties/lib/initializer.rb:132:in `process'
    from ./script/../config/../vendor/rails/railties/lib/initializer.rb:113:in `send'
    from ./script/../config/../vendor/rails/railties/lib/initializer.rb:113:in `run'
    from /home/developer/bigpink/config/environment.rb:13
    from /home/developer/bigpink/vendor/rails/activesupport/lib/active_support/dependencies.rb:156:in `require'
    from /home/developer/bigpink/vendor/rails/activesupport/lib/active_support/dependencies.rb:156:in `require'
    from /home/developer/bigpink/vendor/rails/activesupport/lib/active_support/dependencies.rb:521:in `new_constants_in'
    from /home/developer/bigpink/vendor/rails/activesupport/lib/active_support/dependencies.rb:156:in `require'
    from /home/developer/bigpink/vendor/rails/railties/lib/commands/server.rb:84
    from script/server:3:in `require'
    from script/server:3

所以,不太确定该怎么做。希望我能得到一些快速的帮助。谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-2


    【解决方案1】:

    更新:除了@uxp 的回答,如果你在运行 Catalina 的 Mac 上运行这个命令,命令有一个小的变化,你需要添加 -n。

    所以命令是sudo gem update --system -n 1.8.25

    【讨论】:

      【解决方案2】:

      另一种方法是安装 slimgems:gem install slimgems。这是 RubyGems 的一个插入式分支,可以更好地与旧版本配合使用。

      【讨论】:

        【解决方案3】:

        这对我有帮助:http://djellemah.com/blog/2013/02/27/rails-23-with-ruby-20/

        我结合gem update --system 1.8.25 执行此操作,您的情况可能不需要。

        【讨论】:

          【解决方案4】:

          对于 rvm 用户,

          rvm install rubygems 1.8.2 --force
          

          【讨论】:

          • 我必须回到 1.6.2 才能完成这项工作。但正是这个命令需要。
          【解决方案5】:

          我自己在尝试将旧版 Rails 应用程序从 REE 1.8.7 升级到 1.9.3-p385 时遇到了这个问题。奇怪的是,Ruby 1.9.3-p327 工作得很好。归根结底,ruby-1.9.3-p385 为我安装了 RubyGems 2.0.2 版,而 1.9.3-p327 安装了 RubyGems v1.8.23。

          Gem.source_index 已经被弃用了一段时间,但由于 Rails 2.3 除了关键的安全补丁之外没有任何更新,这个问题永远不会得到修复。 RubyGems v2.0 最终删除了该方法。降级到 2.0.0 之前的任何 rubygems 版本,例如 1.8.25 以暂时恢复功能。您可以使用gem update --system 1.8.25 获取兼容版本。

          另外一点很重要,Rails 2.3.5 至少需要更新到 2.3.17。有一些严重的安全漏洞会让您面临一些非常讨厌的攻击。从长远来看,升级到 3.x 需要被视为非常强烈的需求。

          【讨论】:

          • 非常感谢!它工作得很好。是的,谢谢,我正在升级到 2.3.17,然后升级到最新的 3.x。
          • @uxp 关于这个问题的任何提示:stackoverflow.com/questions/15374188/…
          • 任何使用RVM 的人都可以致电rvm rubygems latest-1.8 来降级rubygems 并修复此问题。
          • Martin 的评论(使用 RVM 的任何人都可以调用 rvm ruby​​gems latest-1.8 来降级 ruby​​gems 并解决此问题。)帮助我解决了我的问题,几个小时以来我一直被困在那里。非常感谢。
          • 需要强制降级rubygems:rvm rubygems --force latest-1.8
          猜你喜欢
          • 2013-10-20
          • 1970-01-01
          • 2017-01-20
          • 1970-01-01
          • 2016-10-14
          • 1970-01-01
          • 2013-09-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多