unicornの起動スクリプトで環境変数を設定してもreload(USR2シグナル)では再読み込みされない

  • 1
    Like
  • 0
    Comment
More than 1 year has passed since last update.

環境

Rails:4.2.0
Unicorn:5.1.0
rails env:production

Unicornの環境変数は再読み込みされない?

lib/tasks/unicorn.rake で、unicornのstartとかstopとかrestartできるようにしてます。
バージョン管理に含めたくない定数とか、環境変数に入れますよね。たぶん。
そこで、unicorn.rake に環境変数を設定したところ、bin/rake unicorn:restart では環境変数がセットされませんでした。

該当箇所のコードは以下のようになってます。

lib/tasks/unicorn.rake
ENV['SECRET_VALUE'] = 'abcdefg'

task(:restart) { unicorn_signal :USR2 }

def unicorn_signal signal
  Process.kill signal, unicorn_pid
end

で、どうしたか?

実は、先の unicorn の起動スクリプトで、stop&start すると、環境変数が再読み込みされました(当たり前か)。
個人で勉強用にやってるものだったので、とりあえずこれで対応をしてます。

本当はどうするべきなのか?

gem で dotenv-rails を使うのがよいのかな、と思います。
こちらが参考になります。→ http://qiita.com/closer/items/f8d8ba00ae86d7051764

コレ間違ってる、新しいやり方がある、こっちのほうがオススメ、とかあれば教えてもらえると助かります!

追記

dotenvをproduction環境で使わないほうがいいよ、って話もあるようです。→ http://t-cyrill.hatenablog.jp/entry/2015/03/25/024625

ただ、バランシングして複数のウェブサーバがいたりすると、ウェブサーバ側に環境変数設定を書いていて、もし書き換える必要がでたときに、バランサから外して書き換えて、ってことをやらなきゃいけなくなりそう。
なので、できるだけunicornの起動スクリプトやRails側に置きたいなあ、と思っていたんですが、その考え方が間違ってるのでしょうか……?