aboutsummaryrefslogtreecommitdiffstats
path: root/railties/test
diff options
context:
space:
mode:
authorTawan Sierek <tawan.sierek@gmail.com>2016-01-11 11:12:32 +0100
committerTawan Sierek <tawan.sierek@gmail.com>2016-01-16 16:16:43 +0100
commit221b4aead579ebae28477e889a7ee68a6668b0fa (patch)
tree6832c99190d150c9b1bdb05794d59ecce3f9b89a /railties/test
parent39f383bad01e52c217c9007b5e9d3b239fe6a808 (diff)
downloadrails-221b4aead579ebae28477e889a7ee68a6668b0fa.tar.gz
rails-221b4aead579ebae28477e889a7ee68a6668b0fa.tar.bz2
rails-221b4aead579ebae28477e889a7ee68a6668b0fa.zip
Avoid multiple default paths to server.pid file
Fix bug (#22811) that occurs when rails server is started in daemon mode and optional path to the `server.pid` file is omitted. Store default path in a constant instead of evaluating it multiple time using `File.expand_path`. The bug in detail: The server startup procedure crashes, since it tries to open a file at `/tmp/pids/server.pid` instead of `<path to project>/tmp/pids/server.pid`. This bug was introduced in 51211a94bd when Rack was upgraded from version 1.x to 2.x. Since version 2.x, Rack does not memoize the options hash [1], and as a consequence `Rails::Server#default_options` will be evaluated multiple times. The hash returned by `Rails::Server#default_options` holds the default path to the `server.pid` file. The path is generated with the method `File.expand_path`. However, the return value of this method depends on the current working directory [2], which changes once `Process.daemon` is invoked by `Rack::Server#daemonize_app` and the process is detached from the current shell. Close #22811 [1]https://git.io/vzen2 [2]http://ruby-doc.org/core-2.1.5/File.html#method-c-expand_path
Diffstat (limited to 'railties/test')
-rw-r--r--railties/test/commands/server_test.rb9
1 files changed, 9 insertions, 0 deletions
diff --git a/railties/test/commands/server_test.rb b/railties/test/commands/server_test.rb
index 3be4a74f74..0c49bd9c53 100644
--- a/railties/test/commands/server_test.rb
+++ b/railties/test/commands/server_test.rb
@@ -108,4 +108,13 @@ class Rails::ServerTest < ActiveSupport::TestCase
end
end
end
+
+ def test_default_options
+ server = Rails::Server.new
+ old_default_options = server.default_options
+
+ Dir.chdir("..") do
+ assert_equal old_default_options, server.default_options
+ end
+ end
end