Зашифрованные учетные данные Rails с промежуточной средой Heroku (с использованием производственных настроек) - PullRequest
1 голос
/ 04 мая 2020

Heroku рекомендует , а не , используя пользовательскую среду под названием staging; вместо этого они предлагают использовать среду production, но с другим набором ENV переменных. Это имеет смысл ( см. Этот вопрос ).

Однако мне интересно, как я могу интегрировать эту практику с зашифрованными учетными данными Rails 6 . Зашифрованные учетные данные поддерживает поддержку нескольких сред, поэтому мы можем хранить наши development и production учетные данные раздельно; однако использование рекомендации Heroku будет означать, что учетные данные production будут разделены между фактическим рабочим сервером и фактическим промежуточным сервером. Что я не хочу.

Что я хочу, так это чтобы сервер staging использовал учетные данные development в среде production!

Сохранение всех загруженных учетных данных и до сегодняшнего дня (между производством, постановкой и всеми нашими разработчиками) хлопотно, а зашифрованный файл кажется очень необходимым улучшением; Я просто не могу разобраться, как подготовиться к использованию непроизводственных кредитов.


PS: возможно, можно переопределить config.credentials.content_path для документов на основе переменная среды, установленная в Heroku, которая указывает, использовать ли учетные данные для производства или разработки. Любопытно, что другие делают или могут сделать.

1 Ответ

1 голос
/ 07 мая 2020

Переопределение - это действительно решение. Вот мои настройки.

Так как RAILS_ENV установлен на production в соответствии с рекомендацией Heroku, я использую другую переменную среды, которую я назвал PIPE_ENV и которая установлена ​​на позицию в конвейере, поэтому staging , edge (для разработки) и др. c.

Теперь в application.rb я задаю путь_содержания.

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

...