【Rails/encrypted secrets】rails5.1からのencrypted secretsに移行する
何度かrailsアプリケーションで、secretsからencrypted secretsに移行したので、メモ
やること - .env等使わず、encrypted secretsだけで運用する - database.ymlの情報も secretsから読み込むようにする - 諸事の事情で、ENVに入れるようにする
encrypted secrets導入
新しく、secrets.yml.key
と secrets.yml.enc
を作成する
bundle exec rails secrets:setup
secrets.yml.encに secrets.ymlのように情報記入
EDITOR=vim bundle exec rails secrets:edit
で、editor開いて 記入していく。
今回は、application内で、ENVで拾うので
development: aws_access_key_id: hogehoge produciton: aws_access_key_id: fugafuga
のように、環境名以下の階層だ1段だけにする
secrets.yml を削除する
忘れないうちに削除しておく
database.ymlの更新
だいたい毎回こんな感じ
default: &default adapter: mysql2 encoding: utf8mb4 charset: utf8mb4 collation: utf8mb4_general_ci pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> socket: /tmp/mysql.sock development: <<: *default database: <%= ENV['DATABASE_NAME'] %> host: <%= ENV['DATABASE_HOST'] %> username: <%= ENV['DATABASE_USER_NAME'] %> password: <%= ENV['DATABASE_PASSWORD'] %> test: <<: *default database: <%= ENV['DATABASE_NAME'] %> host: <%= ENV['DATABASE_HOST'] %> username: <%= ENV['DATABASE_USER_NAME'] %> password: <%= ENV['DATABASE_PASSWORD'] %> staging: <<: *default database: <%= ENV['DATABASE_NAME'] %> host: <%= ENV['DATABASE_HOST'] %> username: <%= ENV['DATABASE_USER_NAME'] %> password: <%= ENV['DATABASE_PASSWORD'] %> reconnect: true port: 3306 pool: 15 production: <<: *default database: <%= ENV['DATABASE_NAME'] %> host: <%= ENV['DATABASE_HOST'] %> username: <%= ENV['DATABASE_USER_NAME'] %> password: <%= ENV['DATABASE_PASSWORD'] %> reconnect: true port: 3306 pool: 20
rails起動時に、secretsからENVに情報を吐く
config/application.rb
に下記追加
secrets = YAML.parse(Rails::Secrets.read).to_ruby[Rails.env] secrets.each do |key, value| ENV[key.upcase] = value.to_s end
既存のRails.application.secretsをENVに更新
Rails.application.secrets になっている部分を、ENV['HOGEHOGE']に
environmentsに設定追加
config/environments/*
の各設定ファイルに
config.read_encrypted_secrets = true
後は、動くかチェック