Rails 5.1使用secrets.yml.key进行Capistrano部署

6
我正在尝试使用 Capistrano 部署到预发布环境。 我已经设置了我的加密 secret 并在开发环境进行了测试,看起来 secrets 可以使用。我为 `read_encrypted_secrets = true` 设置了预发布环境配置文件。我的 secret key 文件是被 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找不到/使用它呢?

2个回答

14

app_name/shared/config/secrets.yml.key是一个指向最新Capistrano版本的符号链接。这意味着每次运行cap staging deploy时,app_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命令。

你好。我有一个类似的问题。可以用“cap production deploy”代替吗?我有点困惑。 - Valter Ekholm

3
这也适用于Rails 5.2和加密的ENV变量:
```append :linked_files, "config/master.key"```

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接