Capistranoで環境変数を読み込んでくれない

Capistranoで環境変数を読み込んでくれない

ネット上を検索する限り、いろいろなところで出ている話だと見受けられますが、Capistranoでデプロイじに環境変数を読んでくれない問題でハマりました。
どうにか読ませようといろいろ試してみたのですが、やはりダメなようです。

以下のようにdefault_environmentを使うやり方も紹介されていましたが、
deploy.rbを読んでいる段階でENVがセットされていないので、このやり方でも不可能です。

deproy.rb

set :default_environment, ENV.select{ |k,v| k =~ /^FOOBARBAZ_/ }

capistranoのタスクの中で以下のようにenvを出力するようなコマンドを実行してみましたが、
やはり環境変数は設定されていませんでした。

run :printenv, ' > /tmp/printenv.out'

どうやらSSHには接続した際のリクエストがshell,exec,sybsystemの3種類あるようで、
capistranoを使用した際にはユーザのログインシェルが割り当てられないexecでリクエスト
されるために環境変数がセットされないとのことです。

仕方ないので、パスワード系は環境変数に入れずに外部ファイルで設定することにしました。

ちなみに、外部の設定ファイルを管理するのには「settingslogic」というGemが便利です。
https://github.com/binarylogic/settingslogic

YAMLで設定を定義してinitializerで読み込ませることで、アプリ内で
Setting.hoge のようにアクセスできるようになります。
参考URL
http://qa.atmarkit.co.jp/q/2817

TAG

  • このエントリーをはてなブックマークに追加
金子 将範
エンジニア 金子 将範 rubyist

新しいことや難しい課題に挑戦することにやりがいを感じ、安定やぬるい事は退屈だと感じます。 考えるより先に手が動く、肉体派エンジニアで座右の銘は諸行無常。 大事なのは感性、プログラミングにおいても感覚で理解し、感覚で書きます。