Herokurecommendsnot使用名为staging
的自定义环境;相反,他们建议使用production
环境,但使用一组不同的ENV
变量。这很有意义(see this question)。
但是,我想知道如何将这种做法与Rails 6 encrypted credentials功能集成在一起。加密凭证does支持多个环境,因此我们可以将development
和production
凭证分开;但是,使用Heroku的建议将意味着production
凭据将在实际的生产服务器和实际的登台服务器之间共享。我不想要的。
我想要的是staging
服务器在development
环境中使用production
凭据!
保持上传和更新的所有不同凭证(在生产,暂存以及我们所有的开发人员之间)很麻烦,加密文件似乎是急需的改进;我只是无法弄清楚如何分期使用非生产证书。
PS:也许一个人可以根据Heroku中设置的环境变量覆盖config.credentials.content_path
per the docs,该环境变量指示使用生产凭证还是开发凭证。好奇别人在做什么或可能在做什么。
覆盖确实是解决方案。这是我的设置。
由于按照Heroku的建议将RAILS_ENV
设置为production
,所以我使用了另一个环境变量,我将其称为PIPE_ENV
,并且将其设置为管道中的位置,因此staging
,edge
(用于开发)等等
现在在application.rb
中,我设置了content_path。
module MyAppName
class Application < Rails::Application
…
if ENV["PIPE_ENV"].present?
Rails.application.config.credentials.content_path = Rails.root.join("config/credentials/#{ENV["PIPE_ENV"]}.yml.enc")
end
end
end
我不喜欢在这里放东西,但config/environments/production.rb
使用凭据设置邮件程序,因此必须更早设置。
此外,请不要忘记将RAILS_MASTER_KEY设置为相应的环境,因此在登台时请致电
heroku config:set RAILS_MASTER_KEY=your-staging-key -a your-staging-app
当然,your-staging-key
是config/credentials/staging.key
中的字符串