From a39aa99c8145e6782bffa1effd4f3678cab6b794 Mon Sep 17 00:00:00 2001 From: Christos Zisopoulos Date: Wed, 26 Dec 2018 00:03:20 +0100 Subject: [PATCH] Don't load app environment when editing credentials This avoids missing key exceptions caused by code that tries to read the credentials before they have been added to the encrypted file, for example when editing the credentials for a new environment. --- railties/lib/rails/command/actions.rb | 10 ++++++++++ .../rails/commands/credentials/credentials_command.rb | 4 ++-- railties/test/commands/credentials_test.rb | 8 ++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/railties/lib/rails/command/actions.rb b/railties/lib/rails/command/actions.rb index cbb743346b789..50651ad61a9e9 100644 --- a/railties/lib/rails/command/actions.rb +++ b/railties/lib/rails/command/actions.rb @@ -11,10 +11,20 @@ def set_application_directory! end def require_application_and_environment! + require_application! + require_environment! + end + + def require_application! require ENGINE_PATH if defined?(ENGINE_PATH) if defined?(APP_PATH) require APP_PATH + end + end + + def require_environment! + if defined?(APP_PATH) Rails.application.require_environment! end end diff --git a/railties/lib/rails/commands/credentials/credentials_command.rb b/railties/lib/rails/commands/credentials/credentials_command.rb index 4b30d208e00b4..84e90e7a1b5cd 100644 --- a/railties/lib/rails/commands/credentials/credentials_command.rb +++ b/railties/lib/rails/commands/credentials/credentials_command.rb @@ -20,7 +20,7 @@ def help end def edit - require_application_and_environment! + require_application! ensure_editor_available(command: "bin/rails credentials:edit") || (return) @@ -39,7 +39,7 @@ def edit end def show - require_application_and_environment! + require_application! encrypted = Rails.application.encrypted(content_path, key_path: key_path) diff --git a/railties/test/commands/credentials_test.rb b/railties/test/commands/credentials_test.rb index 7842b0db61d5e..26ffe3070c5f7 100644 --- a/railties/test/commands/credentials_test.rb +++ b/railties/test/commands/credentials_test.rb @@ -63,6 +63,14 @@ class Rails::Command::CredentialsCommandTest < ActiveSupport::TestCase end end + test "edit command does not raise when an initializer tries to acces non-existent credentials" do + app_file "config/initializers/raise_when_loaded.rb", <<-RUBY + Rails.application.credentials.missing_key! + RUBY + + assert_match(/access_key_id: 123/, run_edit_command(environment: "qa")) + end + test "show credentials" do assert_match(/access_key_id: 123/, run_show_command) end