Foremanとは
簡単に言うと、下記のことが出来る
- バックグラウンドで動くプロセスの管理
- 必要な環境変数の管理
環境
Ruby 2.0.0-p0
Rails 4.0.0.rc1
インストール
gem 'foreman'
-
bundle installを実行
使い方
- 必要な環境変数を
.envファイルに
.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などに追加しちゃうのはダメなので、.envをgitの無視リストに追加するほうが -
config.reに追加した1行は、他に影響があるかどうかは調べてないので、自己責任で
補足
-
Procfileについて
-
web:はラベル的なものなので、自分が好きなものでいい -
Herokuでも使える為に-p $PORTオプションを付いていますが、Herokuでない場合は、普通にbundle exec rails server書けばOK。詳細の設定については、参考リンクのHeroku profileを参照
-
-
foreman checkで設定内容をチェック出来る。valid procfile detected…の文言が出来ればOK