【发布时间】:2020-10-10 19:33:15
【问题描述】:
TL;博士
如何在两个生产和暂存的 Rails 应用程序中使用production.yml.enc 和staging.yml.enc 凭据文件,而该应用程序只有常规的development、test 和production 环境?
我正在使用 Heroku,并在这个问题中引用它。然而,这并不特定于该供应商。
详细说明
一个应用程序经常部署多次。一个实例用作生产,而另一个是暂存应用程序,预计将投入生产。 Rails 促进了这种模式,因为创建新环境很容易。
但是,Heroku suggests not to do this,有充分的理由。例如,人们可能会想在这里和那里放一些if Rails.env.production?,为一些“但它在登台工作!?”铺平道路。周五晚上。最好有一个单一的生产环境,使用不同的参数集来实际区分各个阶段(例如,不同的 AWS S3 存储桶名称、不同的 API 密钥等)。为此,Heroku 的建议是依赖环境变量。
自 Rails 5.2 及更高版本的 Rails 6 以来,凭据可通过 config/credentials 中的加密 Yaml 文件方便地处理。这通常是人们希望存储从一个环境更改为另一个环境的所有这些变量的地方,而不是使用混乱的环境变量。这种机制可以在 Heroku 中使用,这要归功于一个包含用于解密凭证文件的密钥的 RAILS_MASTER_KEY 环境变量。
但这些部分不太合身。我们如何才能拥有一个 production 环境,而凭据文件是每个环境的?
【问题讨论】:
-
关于这个问题的一些背景信息。我发现 Heroku 的建议不要复制环境,这在 Figaro gem 中已经很容易做到了。但我想使用 Rails 内置的凭证机制。所以我搜索了一些现有的解决方法,但找不到任何解决方法。我特别期待 Heroku 的一些东西,他的文档总体上非常出色。我自己的答案对我来说很好,但我想知道是否有更好的解决方案。
标签: ruby-on-rails heroku