tho*_*mad 4 ruby-on-rails credentials heroku ruby-on-rails-6
Heroku建议 不要使用名为staging
;的自定义环境。相反,他们建议使用production
环境但使用一组不同的ENV
变量。这是有道理的(见这个问题)。
但是,我想知道如何将这种做法与Rails 6 加密凭据功能集成。加密凭证确实支持多种环境,因此我们可以将我们的凭证development
和production
凭证分开;但是,使用 Heroku 的建议意味着production
凭据将在实际生产服务器和实际登台服务器之间共享。我不想要的。
我想要的是staging
服务器development
在production
环境中使用凭据!
保持所有不同的凭据上传并保持最新(在生产、暂存和我们所有的开发人员之间)是一个麻烦,加密文件似乎是一个急需的改进;我只是无法弄清楚如何分阶段使用非生产凭证。
PS:也许可以根据 Heroku 中设置的环境变量覆盖config.credentials.content_path
每个文档,该变量指示是使用生产凭据还是开发凭据。好奇其他人正在做什么或可能做什么。
Nyc*_*cen 11
覆盖确实是解决方案。这是我的设置。
由于RAILS_ENV
设置为production
根据 Heroku 的建议,我使用另一个我调用的环境变量,该变量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
Run Code Online (Sandbox Code Playgroud)
我不喜欢在这里config/environments/production.rb
放东西,而是使用凭据来设置邮件程序,因此必须提前设置。
另外,不要忘记将 RAILS_MASTER_KEY 设置为相应的环境,因此对于暂存您调用
heroku config:set RAILS_MASTER_KEY=your-staging-key -a your-staging-app
Run Code Online (Sandbox Code Playgroud)
当然,your-staging-key
是字符串中的config/credentials/staging.key
奖励,对于您的应用程序的其余部分,您可以添加它,config/initializer/pipe_env.rb
以便您可以Rails.pipe_env
像调用一样调用Rails.env
:
module Rails
class << self
def pipe_env
@_pipe_env = ActiveSupport::StringInquirer.new(ENV["PIPE_ENV"].presence || Rails.env)
end
end
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
959 次 |
最近记录: |