6

我正在尝试使用 capistrano 部署到暂存环境。我已经设置了我的加密机密并在开发中进行了测试,并且这些机密似乎可用。我已经为read_encrypted_secrets = true. 我的密钥文件被 git 忽略了。我已经 ssh 进入我的暂存环境并将其放在secrets.yml.key目录中app_name/current/config。我正在部署到 AWS EC2 实例。我没有使用RAILS_MASTER_KEY环境变量。

当我运行cap staging deploy并选择我的发布标签时,我在deploy:migrating bundle exec rake db:migrate

01 rake aborted!
01 Rails::Secrets::MissingKeyError: Missing encryption key to decrypt secrets with. Ask your team for your master key and put it in ENV["RAILS_MASTER_KEY"]

我在服务器上有正确的密钥,为什么 rails 没有找到/使用它?

4

2 回答 2

14

app_name/current路径只是最新 ​​Capistrano 版本的符号链接。这意味着app_name/current/config每次运行时 的内容都会改变cap staging deploy。如果您通过 ssh 手动将文件添加到该目录,则在后续部署中将不再存在该文件。

将配置文件添加到将在所有部署中持续存在的服务器的正确方法是将其放在共享目录中。具体来说:

  1. 通过 ssh(或 scp),将您的密钥文件放在app_name/shared/config/secrets.yml.key.
  2. 在本地,在deploy.rb中添加以下内容:

    append :linked_files, "config/secrets.yml.key"
    

现在运行cap staging deploy

于 2017-05-22T19:52:06.707 回答
3

这也适用于 Rails 5.2 和加密的 ENV 变量:

append :linked_files, "config/master.key"

于 2018-06-02T01:10:29.027 回答