web-dev-qa-db-ja.com

foremanは「pid#で始まる」という行だけを表示し、それ以外は何も表示しません

フォアマンを実行すると、次のようになります。

 > 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 ...

どうすれば修正できますか?

53
ijverig

この問題は2つの方法で解決できました。

  1. https://github.com/ddollar/foreman/wiki/Missing-Output から:

    プログラムからの出力が表示されない場合は、stdoutをバッファリングしている可能性があります。 Rubyデフォルトで標準出力をバッファします。この動作を無効にするには、このコードをできるだけ早くプログラムに追加します:

    # Ruby
    $stdout.sync = true
    
  2. heroku toolbeltパッケージ を介してフォアマンをインストールする

しかし、何が起こっているのか、なぜこの2つの方法で問題が解決されたのかはまだわかりません...

49
ijverig

私の解決策は$stdout.sync = true config/environments/development.rbの上部にあります。

そうすると、(シンを含む)開発環境をロードするものすべてがstdoutをバッファリングしなくなります。

21
Earle Clubb

「フォアマンは、起動したプロセスによって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に存在しません。

15
julionc

Foremanを使用してRybyプロジェクトではなくPythonプロジェクトを実行していて、同じ問題が発生している場合は、いくつかの解決策があります。Procfileを使用してpython CLIを直接使用すると、 '-u'オプションを使用してstdoutバッファリングを回避できます。

python -u script.py

Procfileを使用してgungicorn、フラスコ、ボトル、イブなどのWSGIサーバーを管理している場合、「。env」ファイルをpythonのルートに追加できます。 =プロジェクト、以下を含む:

PYTHONUNBUFFERED=True
5
jsears

同じ問題があります(Ruby 1.9.3-p0、Rails 3.2rc2、OSX 10.7)。

この行を私のGemfileに追加することにより、foreman-0.27.0を使用して問題を解決しました。

gem 'foreman', '0.27.0'
4
Gerry Shaw

私も同じ問題を抱えていましたが、別の解決策がありました。 (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

そして、それはもはや私に問題を与えませんでした。

4
Dan