課題
Capistranoで環境変数を使用したい。deploy.rb
の default_env
などで割り当てることはできるが、パスワードなど情報はここで持ちたくなく、
普段使用している direnv
の .envrc
ファイルを使いたい
対応
(注)前提: capistrano-rbenvが設定済みであること
ググると capistrano-direnv
がhitするが、実行するとエラーになるし、最終更新が6年前でバージョン0.0.1だったのでこれは使わないことにした。
参考サイトによるとrbenv_prefixのところで読み込ませて上げればいいようなので、ここで読み込ませることにする
例えばこんな .envrc
ファイルがあるとする
# .envrc export RAILS_URL=http://localhost:3000 export DB_HOST=127.0.0.1 export DB_PASS=xxx export MAIL_FROM=xxxx@xxxx.jp
デプロイ先のsharedパス内にファイルを置いておく
$ cp .envrc $SHARED_PATH/
deploy.rb
の rbenv_prefix
に source #{shared_path.join('.envrc')} &&
を追記する
# config/deploy.rb set :rbenv_prefix, "source #{shared_path.join('.envrc')} && RBENV_ROOT=#{fetch(:rbenv_path)} RBENV_VERSION=#{fetch(:rbenv_ruby)} #{fetch(:rbenv_path)}/bin/rbenv exec"
こうすると capistranoの各コマンド実行時に毎回 sourceコマンドが実行され、 環境変数がセットされた状態で処理が実行される。 環境変数読み込ませたいだけなので、direnvは特に関係ない。
毎回読み込まれるのがやや気になるが、ひとまず良しとする。