`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已废弃
`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谢谢。
文章标题:解决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问题,并正常启动服务器。
问题的原因是使用的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
的问题。如果遇到其他问题,请参考相关文档进行解决。
这个问题的出现是因为`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版本。