def add_gem_load_paths
Rails::GemDependency.add_frozen_gem_path
unless @configuration.gems.empty?
require "rubygems"
@configuration.gems.each { |gem| gem.add_load_paths }
end
end
Configuration.gems は、デフォルトでは空です。
def default_gems
[]
end
Configuration に gem というメソッドがあり、
def gem(name, options = {})
@gems << Rails::GemDependency.new(name, options)
end
environment.rb に、
# Specify gems that this application depends on and have them installed with rake gems:install
# config.gem "bj"
という説明があるので、 config.gem を書いておくと Configuration.gems に Rails::GemDependency が追加される仕組みになっているようです。
GemDependency.add_load_paths はどうなっているかというと
class GemDependency < Gem::Dependency
~~ 略 ~~
def add_load_paths
self.class.add_frozen_gem_path
return if @loaded || @load_paths_added
if framework_gem?
@load_paths_added = @loaded = @frozen = true
return
end
gem self
@spec = Gem.loaded_specs[name]
@frozen = @spec.loaded_from.include?(self.class.unpacked_path) if @spec
@load_paths_added = true
rescue Gem::LoadError
end
end
たぶん、8行目あたりの gem self がポイント。
[Rails][CodeReading] Railsの初期化コードを読む (イントロ&目次)
0 件のコメント:
コメントを投稿