aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/initializer.rb
diff options
context:
space:
mode:
Diffstat (limited to 'railties/lib/initializer.rb')
-rw-r--r--railties/lib/initializer.rb25
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