`add_frozen_gem_path': undefined method `source_index' for Gem:Module (NoMethodError) OR Gem.source_index is deprecated `add_frozen_gem_path': Gem:Module没有定义`source_index'方法 (NoMethodError) 或者Gem.source_index已废弃

11 浏览
0 Comments

`add_frozen_gem_path': undefined method `source_index' for Gem:Module (NoMethodError) OR Gem.source_index is deprecated `add_frozen_gem_path': Gem:Module没有定义`source_index'方法 (NoMethodError) 或者Gem.source_index已废弃

我正在使用rails 2.3.11和ruby-1.9.2-p320版本。\n尝试运行script/server但是出现以下错误:\n

system@admin:~/apps/app_name/trunk$ script/server
=> 正在启动WEBrick
=> Rails 2.3.11应用程序正在http://0.0.0.0:3000上启动
/home/system/.rvm/gems/ruby-1.9.2-p320@gemset_name/gems/rails-2.3.11/lib/rails/gem_dependency.rb:21:in `add_frozen_gem_path': Gem:Module没有`source_index'方法 (NoMethodError)
    from /home/system/.rvm/gems/ruby-1.9.2-p320@gemset_name/gems/rails-2.3.11/lib/initializer.rb:298:in `add_gem_load_paths'
    from /home/system/.rvm/gems/ruby-1.9.2-p320@gemset_name/gems/rails-2.3.11/lib/initializer.rb:132:in `process'
    from /home/system/.rvm/gems/ruby-1.9.2-p320@gemset_name/gems/rails-2.3.11/lib/initializer.rb:113:in `run'
    from /home/system/apps/app_name/trunk/config/environment.rb:9:in `'
    from /home/system/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/core_ext/kernel_require.rb:126:in `require'
    from /home/system/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/core_ext/kernel_require.rb:126:in `require'
    from /home/system/.rvm/gems/ruby-1.9.2-p320@gemset_name/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:182:in `block in require'
    from /home/system/.rvm/gems/ruby-1.9.2-p320@gemset_name/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:547:in `new_constants_in'
    from /home/system/.rvm/gems/ruby-1.9.2-p320@gemset_name/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:182:in `require'
    from /home/system/.rvm/gems/ruby-1.9.2-p320@gemset_name/gems/rails-2.3.11/lib/commands/server.rb:84:in `'
    from /home/system/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/core_ext/kernel_require.rb:73:in `require'
    from /home/system/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/core_ext/kernel_require.rb:73:in `require'
    from script/server:3:in `
'

\n然后我参考了stackoverflow上的几个答案,并从终端运行了以下命令:\n

system@admin:~/apps/app_name/trunk$ gem update --system 1.8.25

\n现在我得到了以下错误:\n

system@admin:~/apps/app_name/trunk$ script/server
=> 正在启动WEBrick
=> Rails 2.3.11应用程序正在http://0.0.0.0:3000上启动
NOTE: Gem.source_index已弃用,请使用Specification。它将在2011-11-01或之后移除。
Gem.source_index调用自/home/system/.rvm/gems/ruby-1.9.2-p320@gemset_name/gems/rails-2.3.11/lib/rails/gem_dependency.rb:21。
NOTE: Gem::SourceIndex#refresh!已弃用,没有替代方法。它将在2011-11-01或之后移除。
Gem::SourceIndex#refresh!调用自/home/system/.rvm/gems/ruby-1.9.2-p320@gemset_name/gems/rails-2.3.11/lib/rails/vendor_gem_source_index.rb:34。
NOTE: Gem::SourceIndex#load_gems_in已弃用,没有替代方法。它将在2011-11-01或之后移除。
Gem::SourceIndex#load_gems_in调用自/home/system/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/source_index.rb:322。
NOTE: Gem::SourceIndex#add_spec已弃用,请使用Specification.add_spec。它将在2011-11-01或之后移除。
Gem::SourceIndex#add_spec调用自/home/system/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/source_index.rb:127。
...

\n接下来是我的environment.rb文件内容:\n

# 在修改此文件时,请确保重新启动服务器
# 指定在没有vendor/rails的情况下使用的Rails gem版本
RAILS_GEM_VERSION = '2.3.11' unless defined? RAILS_GEM_VERSION
# 引导Rails环境,框架和默认配置
require File.join(File.dirname(__FILE__), 'boot')
Rails::Initializer.run do |config|
  config.gem 'jrails'
  # 在config/environments/*中的设置优先于此处指定的设置。
  # 应用程序配置应放在config/initializers中的文件中
  # --该目录中的所有.rb文件都会被自动加载。
  # 为您自定义的自定义目录添加附加加载路径
  # config.autoload_paths += %W( #{RAILS_ROOT}/extras )
  # 指定此应用程序所依赖的gems,并使用rake gems:install安装它们
  # config.gem "bj"
  # config.gem "hpricot", :version => '0.6', :source => "http://code.whytheluckystiff.net"
  # config.gem "sqlite3-ruby", :lib => "sqlite3"
  # config.gem "aws-s3", :lib => "aws/s3"
  # 仅加载此处命名的插件,顺序给出(默认按字母顺序)。
  # :all可用作所有未明确命名的插件的占位符
  # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
  # 跳过您不打算使用的框架。要在没有数据库的情况下使用Rails,
  # 您必须删除Active Record框架。
  # config.frameworks -= [ :active_record, :active_resource, :action_mailer ]
  # 激活始终应运行的观察者
  # config.active_record.observers = :cacher, :garbage_collector, :forum_observer
  # 将Time.zone默认设置为指定的区域,并使Active Record自动转换为此区域。
  # 运行“rake -D time”以获取查找时区名称的任务列表。
  config.time_zone = 'UTC'
  # 默认语言是:en,所有翻译来自config/locales/*.rb,yml的自动加载。
  # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}')]
  # config.i18n.default_locale = :de
end

\n以下是我的rakefile文件内容:\n

# 在放置在以.rake结尾的文件中的lib/tasks中添加您自己的任务,
# 例如lib/tasks/capistrano.rake,它们将自动可用于Rake。
require(File.join(File.dirname(__FILE__), 'config', 'boot'))
require 'rake'
require 'rake/testtask'
require 'rdoc/task'
require 'tasks/rails'

\n以下是我参考的解决方案:\nUninitialized constant ActiveSupport::Dependencies::Mutex (NameError)\nundefined method `name\' for \"actionmailer\":String\n请帮助我解决这个问题。\n谢谢。

0
0 Comments

文章标题:解决Gem.source_index is deprecated问题的方法

在使用Ruby on Rails开发项目时,有时会遇到如下错误信息:`add_frozen_gem_path': undefined method `source_index' for Gem:Module (NoMethodError) OR Gem.source_index is deprecated。本文将介绍这个问题出现的原因以及解决方法。

问题出现的原因:

该错误通常是由于使用了过时的Gem源索引方法`source_index'导致的。在新版本的RubyGems中,该方法已被弃用,因此会导致出现上述错误。

解决方法如下:

1. 在mysql.yml文件中更新mysgl适配器为mysql2:

development:
  adapter: mysql2
  database: app_db
  username: root
  password: root
  host: localhost

2. 安装mysql2适配器:

gem install activerecord-mysql2-adapter

3. 从config/environment.rb文件中安装缺失的gems:

rake gems:install

4. 在项目文件夹中给服务器文件赋予执行权限:

chmod u+x ./script/server

5. 启动服务器:

chmod u+x ./script/server 
./script/server start

./script/server

exec script/server

通过以上步骤,您应该能够成功解决`add_frozen_gem_path': undefined method `source_index' for Gem:Module (NoMethodError) OR Gem.source_index is deprecated问题,并正常启动服务器。

0
0 Comments

问题的原因是使用的Ruby版本和Rubygems版本过旧。解决方法是使用rvm工具安装最新的Ruby 1.9和Rubygems,并按照以下步骤进行操作:

1. 打开终端,运行以下命令安装rvm工具:

\curl -L https://get.rvm.io | bash -s stable

2. 安装最新的Ruby 1.9版本,运行以下命令:

rvm install 1.9

3. 设置默认使用Ruby 1.9版本,运行以下命令:

rvm use 1.9 --default

4. 更新Rubygems到最新版本,同时验证下载的文件完整性,运行以下命令:

rvm rubygems latest --verify-downloads 1

5. 安装bundler gem,运行以下命令:

gem install bundler

6. 最后,运行以下命令启动服务器:

bundle exec ./script/server

通过以上步骤,就可以解决add_frozen_gem_path': undefined method `source_index' for Gem:Module (NoMethodError) OR Gem.source_index is deprecated的问题。如果遇到其他问题,请参考相关文档进行解决。

0
0 Comments

这个问题的出现是因为`source_index`方法在新版本的Gem中已经被弃用。解决方法是通过运行命令`rvm install rubygems 1.4.2 --force`来安装旧版本的Rubygems。

在最新版本的Gem中,`source_index`方法已经被移除,而替代它的是`Specification`类。因此,当使用旧版本的Gem时,会出现`undefined method 'source_index' for Gem:Module (NoMethodError)`的错误。

为了解决这个问题,我们可以通过安装旧版本的Rubygems来恢复`source_index`方法的功能。在命令行中运行以下命令即可解决问题:

rvm install rubygems 1.4.2 --force

这条命令将强制安装Rubygems的1.4.2版本,这是一个较旧的版本,它仍然包含了`source_index`方法。安装完成后,您应该能够正常运行您的代码而不再遇到`undefined method 'source_index' for Gem:Module (NoMethodError)`的错误。

通过运行上述命令,您成功解决了`source_index`方法被弃用的问题,并且能够继续使用旧版本的Gem。请记住,这个解决方法只是为了解决特定的问题,如果您的代码依赖于新版本的Gem或其他新功能,您可能需要考虑升级您的代码以适应新的Gem版本。

0