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

Posted

技术标签:

【中文标题】Rails 5.1 Capistrano 使用 secrets.yml.key 部署【英文标题】:Rails 5.1 Capistrano Deploying with secrets.yml.key 【发布时间】:2017-10-22 14:00:30 【问题描述】:

我正在尝试使用 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 没有找到/使用它?

【问题讨论】:

【参考方案1】:

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

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

    通过 ssh(或 scp),将您的密钥文件放在 app_name/shared/config/secrets.yml.key

    在本地,在 deploy.rb 中,添加以下内容:

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

现在运行cap staging deploy

【讨论】:

你好。我有一个类似的问题。可以改为“上限生产部署”吗?我很困惑。【参考方案2】:

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

append :linked_files, "config/master.key"

【讨论】:

以上是关于Rails 5.1 Capistrano 使用 secrets.yml.key 部署的主要内容,如果未能解决你的问题,请参考以下文章

Rails 3 -- Bundler/Capistrano 错误

Rails 4 + Capistrano + AWS Net::SSH::AuthenticationFailed: 部署

如何在被 capistrano 禁用时访问 rails 应用程序,使用 deploy:web:disable 来更新内容?

rails 4.1 无法通过 capistrano 3 部署

无法通过 capistrano 部署 rails 5 应用程序

加速资产:使用 Rails 3.1/3.2 Capistrano 部署预编译