【问题标题】:Rails encrypted credentials with Heroku staging environment (using production setting)使用 Heroku 登台环境的 Rails 加密凭证(使用生产设置)
【发布时间】:2020-08-18 06:48:06
【问题描述】:

Heroku recommends 使用名为 staging 的自定义环境;相反,他们建议使用production 环境,但使用一组不同的ENV 变量。这是有道理的 (see this question)。

但是,我想知道如何将这种做法与Rails 6 encrypted credentials 功能结合起来。加密凭据确实支持多种环境,因此我们可以将 developmentproduction 凭据分开;但是,使用 Heroku 的建议意味着 production 凭据将在实际生产服务器和实际登台服务器之间共享。我不想要。

我想要的是staging 服务器在production 环境中使用development 凭据!

让所有不同的凭据上传并保持最新(在生产、暂存和我们所有的开发人员之间)是一件麻烦事,加密文件似乎是一个非常需要的改进;我只是无法弄清楚如何进行登台以使用非生产凭据。


PS:也许可以根据 Heroku 中设置的环境变量覆盖 config.credentials.content_path per the docs,该变量指示是使用生产凭据还是开发凭据。好奇别人正在做什么或可能做什么。

【问题讨论】:

    标签: ruby-on-rails heroku credentials ruby-on-rails-6


    【解决方案1】:

    覆盖确实是解决方案。这是我的设置。

    由于根据 Heroku 的建议将 RAILS_ENV 设置为 production,因此我使用了另一个名为 PIPE_ENV 的环境变量,它设置为管道中的位置,因此 stagingedge(用于开发) 等。

    现在在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 设置为相应的环境,以便您调用 staging

    heroku config:set RAILS_MASTER_KEY=your-staging-key -a your-staging-app
    

    当然your-staging-keyconfig/credentials/staging.key中的字符串

    奖励,对于应用程序的其余部分,您可以将其添加到 config/initializer/pipe_env.rb,以便您可以像调用 Rails.env 一样调用 Rails.pipe_env

    module Rails
      class << self
        def pipe_env
          @_pipe_env = ActiveSupport::StringInquirer.new(ENV["PIPE_ENV"].presence || Rails.env)
        end
      end
    end
    

    【讨论】:

    • application.rb 中,您还可以设置key_path,以便测试PIPE_ENV=staging rails cPIPE_ENV=staging rails s 也适用于您的开发设置。而Rails.application.config.credentials.content_path实际上可以简化为config.credentials.content_path
    • ``` ``` 模块 MyAppName 类 Application
    猜你喜欢
    • 2018-12-06
    • 2022-08-15
    • 2017-08-31
    • 2015-05-10
    • 2018-09-07
    • 2014-06-02
    • 2020-01-13
    • 2014-01-28
    • 2011-04-14
    相关资源
    最近更新 更多