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