前人未踏の領域へ WEB・インフラ・プログラミング全般編

フロントエンド、バックエンド、インフラ、言語など、アプリ開発、IOT以外の記録

Capistrano3: 環境変数を読み込んで使う

課題

Capistrano環境変数を使用したい。deploy.rbdefault_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.rbrbenv_prefixsource #{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は特に関係ない。

毎回読み込まれるのがやや気になるが、ひとまず良しとする。

参考

qiita.com

/* Responsive: yes */