diff options
-rw-r--r-- | railties/CHANGELOG.md | 4 | ||||
-rw-r--r-- | railties/lib/rails/commands/server/server_command.rb | 23 | ||||
-rw-r--r-- | railties/test/commands/server_test.rb | 4 |
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 |