diff options
Diffstat (limited to 'railties/lib/initializer.rb')
-rw-r--r-- | railties/lib/initializer.rb | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/railties/lib/initializer.rb b/railties/lib/initializer.rb index 32e6c5251b..c3ebffdf03 100644 --- a/railties/lib/initializer.rb +++ b/railties/lib/initializer.rb @@ -72,6 +72,7 @@ module Rails Rails.configuration = configuration check_ruby_version + install_gem_spec_stubs set_load_path require_frameworks @@ -118,6 +119,26 @@ module Rails require 'ruby_version_check' end + # If Rails is vendored and RubyGems is available, install stub GemSpecs + # for Rails, ActiveSupport, ActiveRecord, ActionPack, ActionMailer, and + # ActiveResource. This allows Gem plugins to depend on Rails even when + # the Gem version of Rails shouldn't be loaded. + def install_gem_spec_stubs + if Rails.vendor_rails? + begin; require "rubygems"; rescue LoadError; return; end + + stubs = %w(rails activesupport activerecord actionpack actionmailer activeresource) + stubs.reject! { |s| Gem.loaded_specs.key?(s) } + + stubs.each do |stub| + Gem.loaded_specs[stub] = Gem::Specification.new do |s| + s.name = stub + s.version = Rails::VERSION::STRING + end + end + end + end + # Set the <tt>$LOAD_PATH</tt> based on the value of # Configuration#load_paths. Duplicates are removed. def set_load_path @@ -666,7 +687,9 @@ module Rails end def default_plugin_locators - [Plugin::FileSystemLocator] + locators = [] + locators << Plugin::GemLocator if defined? Gem + locators << Plugin::FileSystemLocator end def default_plugin_loader |