Posted at

Foreman で機密な認証キーなど機密な情報を管理する

More than 5 years have passed since last update.


Foremanとは

簡単に言うと、下記のことが出来る


  • バックグラウンドで動くプロセスの管理

  • 必要な環境変数の管理


環境

Ruby 2.0.0-p0

Rails 4.0.0.rc1


インストール

gem 'foreman'



  • bundle install を実行


使い方


  • 必要な環境変数を .env ファイルに

TW_KEY=asdflaksjzxocuv

TW_SECRET=lkzjxcljvoiuqewrnzoixcvulansdflasdljf


  • 起動したいプロセスを設定ファイルに

web: bundle exec rails server thin -p $PORT


  • foreman startで設定したプロセスを起動する


  • .envファイルに書いた内容を環境変数に設定してくれるイメージなので、ソースには、普通にENV['TW_KEY']を書けば値を取得出来る



ハマったこと


foreman start を実行しても、リアルタイムのログが出てこない


現象



  • 11:59:32 web.1 | started with pid 22383以外は、他は何のログ的なものが出てこない


原因



  • Ruby デフォルトが stdout をキャッシュしているせいですって


  • Foreman missing outputを参照


解決方法



  • [Rails.root]/config.ru に上記リンクにオプションを追加すればOK


config.ru

...

# 下記の行を追加
$stdout.sync = true


  • これで、foreman start を実行すると、下記のように、お馴染みの Rails 起動されるログが出てくる

11:59:32 web.1  | started with pid 22383

11:59:36 web.1 | => Booting Thin
11:59:36 web.1 | => Rails 4.0.0.rc1 application starting in development on http://0.0.0.0:3000
11:59:36 web.1 | => Run `rails server -h` for more startup options
11:59:36 web.1 | => Ctrl-C to shutdown server
11:59:36 web.1 | >> Thin web server (v1.5.1 codename Straight Razor)
11:59:36 web.1 | >> Maximum connections set to 1024
11:59:36 web.1 | >> Listening on 0.0.0.0:3000, CTRL+C to stop


!!注意!!



  • .envファイルの内容はgitなどに追加しちゃうのはダメなので、.envgitの無視リストに追加するほうが


  • config.re に追加した1行は、他に影響があるかどうかは調べてないので、自己責任で


補足



  • Procfileについて



    • web: はラベル的なものなので、自分が好きなものでいい


    • Heroku でも使える為に -p $PORT オプションを付いていますが、 Heroku でない場合は、普通に bundle exec rails server 書けばOK。詳細の設定については、参考リンクのHeroku profileを参照



  • foreman checkで設定内容をチェック出来る。valid procfile detected…の文言が出来ればOK



参考