aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--railties/CHANGELOG2
-rw-r--r--railties/environments/boot.rb13
-rw-r--r--railties/test/boot_test.rb19
3 files changed, 32 insertions, 2 deletions
diff --git a/railties/CHANGELOG b/railties/CHANGELOG
index 87805fd1e7..86bad736ac 100644
--- a/railties/CHANGELOG
+++ b/railties/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Load config/preinitializer.rb, if present, before loading the environment. #9943 [Chad Woolley]
+
* FastCGI handler ignores unsupported signals like USR2 on Windows. [Grzegorz Derebecki]
* Only load ActionMailer::TestCase if ActionMailer is loaded. Closes #10137 [defunkt]
diff --git a/railties/environments/boot.rb b/railties/environments/boot.rb
index 7591290447..518a8883c1 100644
--- a/railties/environments/boot.rb
+++ b/railties/environments/boot.rb
@@ -6,7 +6,10 @@ RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)
module Rails
class << self
def boot!
- pick_boot.run unless booted?
+ unless booted?
+ preinitialize
+ pick_boot.run
+ end
end
def booted?
@@ -20,6 +23,14 @@ module Rails
def vendor_rails?
File.exist?("#{RAILS_ROOT}/vendor/rails")
end
+
+ def preinitialize
+ load(preinitializer_path) if File.exists?(preinitializer_path)
+ end
+
+ def preinitializer_path
+ "#{RAILS_ROOT}/config/preinitializer.rb"
+ end
end
class Boot
diff --git a/railties/test/boot_test.rb b/railties/test/boot_test.rb
index 5d5fb09b41..930a0d552a 100644
--- a/railties/test/boot_test.rb
+++ b/railties/test/boot_test.rb
@@ -11,12 +11,29 @@ class BootTest < Test::Unit::TestCase
assert_nil Rails.boot!
end
- def test_boot_picks_and_runs_if_not_booted
+ def test_boot_preinitializes_then_picks_and_runs_if_not_booted
Rails.expects(:booted?).returns(false)
+ Rails.expects(:preinitialize)
Rails.expects(:pick_boot).returns(mock(:run => 'result'))
assert_equal 'result', Rails.boot!
end
+ def test_preinitialize_does_not_raise_exception_if_preinitializer_file_does_not_exist
+ Rails.stubs(:preinitializer_path).returns('/there/is/no/such/file')
+
+ assert_nothing_raised { Rails.preinitialize }
+ end
+
+ def test_load_preinitializer_loads_preinitializer_file
+ Rails.stubs(:preinitializer_path).returns("#{File.dirname(__FILE__)}/fixtures/environment_with_constant.rb")
+
+ assert_nil $initialize_test_set_from_env
+ Rails.preinitialize
+ assert_equal "success", $initialize_test_set_from_env
+ ensure
+ $initialize_test_set_from_env = nil
+ end
+
def test_boot_vendor_rails_by_default
Rails.expects(:booted?).returns(false)
File.expects(:exist?).with("#{RAILS_ROOT}/vendor/rails").returns(true)