Tell users how to assign a $EDITOR.

In case there's no $EDITOR assigned users would see a cryptic:

```
% EDITOR= bin/rails secrets:edit
Waiting for secrets file to be saved. Abort with Ctrl-C.
sh: /var/folders/wd/xnncwqp96rj0v1y2nms64mq80000gn/T/secrets.yml.enc: Permission denied
New secrets encrypted and saved.
```

That error is misleading, so give a hint in this easily detectable case.

Fixes #28143.
This commit is contained in:
Kasper Timm Hansen 2017-03-01 20:40:39 +01:00
parent b61a56541a
commit 82f7dc6178
2 changed files with 35 additions and 0 deletions

@ -18,6 +18,17 @@ def setup
end
def edit
if ENV["EDITOR"].empty?
say "No $EDITOR to open decrypted secrets in. Assign one like this:"
say ""
say %(EDITOR="mate --wait" bin/rails secrets:edit)
say ""
say "For editors that fork and exit immediately, it's important to pass a wait flag,"
say "otherwise the secrets will be saved immediately with no chance to edit."
return
end
require_application_and_environment!
Rails::Secrets.read_for_editing do |tmp_path|

@ -0,0 +1,24 @@
require "isolation/abstract_unit"
require "rails/command"
require "rails/commands/secrets/secrets_command"
class Rails::Command::SecretsCommandTest < ActiveSupport::TestCase
include ActiveSupport::Testing::Isolation
def setup
build_app
end
def teardown
teardown_app
end
test "edit without editor gives hint" do
assert_match "No $EDITOR to open decrypted secrets in", run_edit_command(editor: "")
end
private
def run_edit_command(editor: "cat")
Dir.chdir(app_path) { `EDITOR="#{editor}" bin/rails secrets:edit` }
end
end