フォアマンを実行すると、次のようになります。
> foreman start
16:47:56 web.1 | started with pid 27122
(ctrl-cを使用して)停止した場合にのみ、欠落しているものが表示されます。
^CSIGINT received
16:49:26 system | sending SIGTERM to all processes
16:49:26 web.1 | => Booting Thin
16:49:26 web.1 | => Rails 3.0.0 application starting in development on http://0.0.0.0:5000
16:49:26 web.1 | => Call with -d to detach
16:49:26 web.1 | => Ctrl-C to shutdown server
16:49:26 web.1 | >> Thin web server (v1.3.1 codename Triple Espresso)
16:49:26 web.1 | >> Maximum connections set to 1024
16:49:26 web.1 | >> Listening on 0.0.0.0:5000, CTRL+C to stop
16:49:26 web.1 | >> Stopping ...
16:49:26 web.1 | Exiting
16:49:26 web.1 | >> Stopping ...
どうすれば修正できますか?
この問題は2つの方法で解決できました。
https://github.com/ddollar/foreman/wiki/Missing-Output から:
プログラムからの出力が表示されない場合は、stdoutをバッファリングしている可能性があります。 Rubyデフォルトで標準出力をバッファします。この動作を無効にするには、このコードをできるだけ早くプログラムに追加します:
# Ruby
$stdout.sync = true
heroku toolbeltパッケージ を介してフォアマンをインストールする
しかし、何が起こっているのか、なぜこの2つの方法で問題が解決されたのかはまだわかりません...
私の解決策は$stdout.sync = true
config/environments/development.rbの上部にあります。
そうすると、(シンを含む)開発環境をロードするものすべてがstdoutをバッファリングしなくなります。
「フォアマンは、起動したプロセスによってstdoutに書き込まれたものをすべてターミナル出力に表示します。」 -ddollar参照 foreman-issues#57
ところで、ログを表示するには、Procfileにtailfを使用できます。
web: bundle exec Rails server thin -p $PORT
log: tail -f log/development.log
ヒント:tail-f -n 40 log/development.logを使用すると、tailXはOSXに存在しません。
Foremanを使用してRybyプロジェクトではなくPythonプロジェクトを実行していて、同じ問題が発生している場合は、いくつかの解決策があります。Procfileを使用してpython CLIを直接使用すると、 '-u'オプションを使用してstdoutバッファリングを回避できます。
python -u script.py
Procfileを使用してgungicorn、フラスコ、ボトル、イブなどのWSGIサーバーを管理している場合、「。env」ファイルをpythonのルートに追加できます。 =プロジェクト、以下を含む:
PYTHONUNBUFFERED=True
同じ問題があります(Ruby 1.9.3-p0、Rails 3.2rc2、OSX 10.7)。
この行を私のGemfileに追加することにより、foreman-0.27.0を使用して問題を解決しました。
gem 'foreman', '0.27.0'
私も同じ問題を抱えていましたが、別の解決策がありました。 (Ruby 1.9.2p290、Rails 3.1.0、ubuntu 10.04.3)
Procfileの行を次のように変更しました。
web: bundle exec thin start -p $PORT
に:
web: bundle exec Rails server thin -p $PORT
そして、それはもはや私に問題を与えませんでした。