Rails 5.1 Capistrano 部署 secrets.yml.key

Rails 5.1 Capistrano Deploying with secrets.yml.key

我正在尝试使用 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 finding/using 不是?

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

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

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

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

现在运行cap staging deploy.

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

append :linked_files, "config/master.key"