hamayuzinの日記

エンジニアとかデータサイエンティストとかやってます。あの時 あれやってたな的な備忘録にできれば。

【rails/capistrano】railsでcapistrano deploy内で、secrets.yml or secrets.yml.encの値を使う方法

環境 rails5.1.3

railscapistrano deployする時に deploy.rb や、rake タスク内で、 railsのsecrets ファイルを参照したいことがよくある。

1週間くらい うまく使えないか調べてたが 方法があった

方法

deploy.rbの中で、下記を記述するだけ 今回は、ridgepoleを動かすために database.ymlの値を設定する

require 'rails'
secrets = YAML.parse(Rails::Secrets.read).to_ruby[env.stages.first]['db']
set :default_env, {
  DATABASE_NAME: secrets['DATABASE_NAME'],
  DATABASE_HOST: secrets['DATABASE_HOST'],
  DATABASE_USER_NAME: secrets['DATABASE_USER_NAME'],
  DATABASE_PASSWORD: secrets['DATABASE_PASSWORD'],
}

この記述の処理自体は、ローカルで行われるが env.stages.first で、deploy先の環境を取得できる(staging とか)

設定した値は下記で取得できる

ENV['DATABASE_NAME']