aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--railties/CHANGELOG.md4
-rw-r--r--railties/lib/rails/commands/server/server_command.rb23
-rw-r--r--railties/test/commands/server_test.rb4
3 files changed, 25 insertions, 6 deletions
diff --git a/railties/CHANGELOG.md b/railties/CHANGELOG.md
index 0856d2655a..bd76dc4bc8 100644
--- a/railties/CHANGELOG.md
+++ b/railties/CHANGELOG.md
@@ -2,10 +2,6 @@
*Rafael Mendonça França*
-* Remove deprecated `server` argument from the rails server command.
-
- *Rafael Mendonça França*
-
* Remove deprecated support to old `config.ru` that use the application class as argument of `run`.
*Rafael Mendonça França*
diff --git a/railties/lib/rails/commands/server/server_command.rb b/railties/lib/rails/commands/server/server_command.rb
index 20694e7e39..47c3f05bb3 100644
--- a/railties/lib/rails/commands/server/server_command.rb
+++ b/railties/lib/rails/commands/server/server_command.rb
@@ -98,6 +98,8 @@ module Rails
DEFAULT_PORT = 3000
DEFAULT_PID_PATH = "tmp/pids/server.pid"
+ argument :using, optional: true
+
class_option :port, aliases: "-p", type: :numeric,
desc: "Runs Rails on the specified port - defaults to 3000.", banner: :port
class_option :binding, aliases: "-b", type: :string,
@@ -124,6 +126,7 @@ module Rails
super
@original_options = local_options - %w( --restart )
+ deprecate_positional_rack_server_and_rewrite_to_option(@original_options)
end
def perform
@@ -141,7 +144,7 @@ module Rails
after_stop_callback = -> { say "Exiting" unless options[:daemon] }
server.start(after_stop_callback)
else
- say rack_server_suggestion(options[:using])
+ say rack_server_suggestion(using)
end
end
end
@@ -150,7 +153,7 @@ module Rails
def server_options
{
user_supplied_options: user_supplied_options,
- server: options[:using],
+ server: using,
log_stdout: log_to_stdout?,
Port: port,
Host: host,
@@ -259,6 +262,22 @@ module Rails
FileUtils.rm_f(options[:pid]) if options[:restart]
end
+ def deprecate_positional_rack_server_and_rewrite_to_option(original_options)
+ if using
+ ActiveSupport::Deprecation.warn(<<~MSG)
+ Passing the Rack server name as a regular argument is deprecated
+ and will be removed in the next Rails version. Please, use the -u
+ option instead.
+ MSG
+
+ original_options.concat [ "-u", using ]
+ else
+ # Use positional internally to get around Thor's immutable options.
+ # TODO: Replace `using` occurrences with `options[:using]` after deprecation removal.
+ @using = options[:using]
+ end
+ end
+
def rack_server_suggestion(server)
if server.in?(RACK_SERVERS)
<<~MSG
diff --git a/railties/test/commands/server_test.rb b/railties/test/commands/server_test.rb
index 14d63a78e0..25b89ecbd8 100644
--- a/railties/test/commands/server_test.rb
+++ b/railties/test/commands/server_test.rb
@@ -38,6 +38,10 @@ class Rails::Command::ServerCommandTest < ActiveSupport::TestCase
assert_no_match(/Maybe you meant/, output)
end
+ def test_using_positional_argument_deprecation
+ assert_match(/DEPRECATION WARNING/, run_command("tin"))
+ end
+
def test_using_known_server_that_isnt_in_the_gemfile
assert_match(/Could not load server "unicorn". Maybe you need to the add it to the Gemfile/, run_command("-u", "unicorn"))
end