未验证 提交 1cdc6c65 编写于 作者: Y Yuji Yaginuma 提交者: GitHub

Merge pull request #35599 from y-yagi/improve_environment_argument_handling

Properly expand the environment's name in all commands
# frozen_string_literal: true
require "active_support"
require "active_support/core_ext/class/attribute"
module Rails
module Command
......@@ -8,16 +9,16 @@ module EnvironmentArgument #:nodoc:
extend ActiveSupport::Concern
included do
class_option :environment, aliases: "-e", type: :string,
desc: "Specifies the environment to run this console under (test/development/production)."
class_attribute :environment_desc, default: "Specifies the environment to run this #{self.command_name} under (test/development/production)."
class_option :environment, aliases: "-e", type: :string, desc: environment_desc
end
private
def extract_environment_option_from_argument
def extract_environment_option_from_argument(default_environment: Rails::Command.environment)
if options[:environment]
self.options = options.merge(environment: acceptable_environment(options[:environment]))
else
self.options = options.merge(environment: Rails::Command.environment)
self.options = options.merge(environment: default_environment)
end
end
......
......@@ -2,14 +2,15 @@
require "active_support"
require "rails/command/helpers/editor"
require "rails/command/environment_argument"
module Rails
module Command
class CredentialsCommand < Rails::Command::Base # :nodoc:
include Helpers::Editor
include EnvironmentArgument
class_option :environment, aliases: "-e", type: :string,
desc: "Uses credentials from config/credentials/:environment.yml.enc encrypted by config/credentials/:environment.key key"
self.environment_desc = "Uses credentials from config/credentials/:environment.yml.enc encrypted by config/credentials/:environment.key key"
no_commands do
def help
......@@ -20,6 +21,7 @@ def help
end
def edit
extract_environment_option_from_argument(default_environment: nil)
require_application!
ensure_editor_available(command: "bin/rails credentials:edit") || (return)
......@@ -37,6 +39,7 @@ def edit
end
def show
extract_environment_option_from_argument(default_environment: nil)
require_application!
say credentials.read.presence || missing_credentials_message
......
# frozen_string_literal: true
require "rails/command/environment_argument"
module Rails
module Command
class RunnerCommand < Base # :nodoc:
class_option :environment, aliases: "-e", type: :string,
default: Rails::Command.environment.dup,
desc: "The environment for the runner to operate under (test/development/production)"
include EnvironmentArgument
self.environment_desc = "The environment for the runner to operate under (test/development/production)"
no_commands do
def help
......@@ -19,6 +21,8 @@ def self.banner(*)
end
def perform(code_or_file = nil, *command_argv)
extract_environment_option_from_argument
unless code_or_file
help
exit 1
......
......@@ -6,6 +6,7 @@
require "active_support/deprecation"
require "active_support/core_ext/string/filters"
require "rails/dev_caching"
require "rails/command/environment_argument"
module Rails
class Server < ::Rack::Server
......@@ -91,6 +92,8 @@ def use_puma?
module Command
class ServerCommand < Base # :nodoc:
include EnvironmentArgument
# Hard-coding a bunch of handlers here as we don't have a public way of
# querying them from the Rack::Handler registry.
RACK_SERVERS = %w(cgi fastcgi webrick lsws scgi thin puma unicorn)
......@@ -109,8 +112,6 @@ class ServerCommand < Base # :nodoc:
desc: "Uses a custom rackup configuration.", banner: :file
class_option :daemon, aliases: "-d", type: :boolean, default: false,
desc: "Runs server as a Daemon."
class_option :environment, aliases: "-e", type: :string,
desc: "Specifies the environment to run this server under (development/test/production).", banner: :name
class_option :using, aliases: "-u", type: :string,
desc: "Specifies the Rack server used to run the application (thin/puma/webrick).", banner: :name
class_option :pid, aliases: "-P", type: :string, default: DEFAULT_PID_PATH,
......@@ -130,6 +131,7 @@ def initialize(args, local_options, *)
end
def perform
extract_environment_option_from_argument
set_application_directory!
prepare_restart
......
......@@ -109,6 +109,10 @@ def test_environment_option
assert_match "production", rails("runner", "-e", "production", "puts Rails.env")
end
def test_environment_option_is_properly_expanded
assert_match "production", rails("runner", "-e", "prod", "puts Rails.env")
end
def test_runner_detects_syntax_errors
output = rails("runner", "puts 'hello world", allow_failure: true)
assert_not_predicate $?, :success?
......
......@@ -63,6 +63,14 @@ class Rails::Command::CredentialsCommandTest < ActiveSupport::TestCase
end
end
test "edit command properly expand environment option" do
assert_match(/access_key_id: 123/, run_edit_command(environment: "prod"))
Dir.chdir(app_path) do
assert File.exist?("config/credentials/production.key")
assert File.exist?("config/credentials/production.yml.enc")
end
end
test "edit command does not raise when an initializer tries to access non-existent credentials" do
app_file "config/initializers/raise_when_loaded.rb", <<-RUBY
Rails.application.credentials.missing_key!
......@@ -95,6 +103,12 @@ class Rails::Command::CredentialsCommandTest < ActiveSupport::TestCase
assert_match(/access_key_id: 123/, run_show_command(environment: "production"))
end
test "show command properly expand environment option" do
run_edit_command(environment: "production")
assert_match(/access_key_id: 123/, run_show_command(environment: "prod"))
end
private
def run_edit_command(editor: "cat", environment: nil, **options)
switch_env("EDITOR", editor) do
......
......@@ -22,6 +22,12 @@ def test_environment_without_server_option
assert_nil options[:server]
end
def test_environment_option_is_properly_expanded
args = ["-e", "prod"]
options = parse_arguments(args)
assert_equal "production", options[:environment]
end
def test_explicit_using_option
args = ["-u", "thin"]
options = parse_arguments(args)
......@@ -285,6 +291,8 @@ def run_command(*args)
end
def parse_arguments(args = [])
Rails::Command::ServerCommand.new([], args).server_options
command = Rails::Command::ServerCommand.new([], args)
command.send(:extract_environment_option_from_argument)
command.server_options
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册