Sinatra: sinatraの使用時にDockerSTDOUTがありません

作成日 2016年05月28日  ·  4コメント  ·  ソース: sinatra/sinatra

次の簡単な例(app.rb)とそれ以上のものがあれば

# -*- coding: utf-8 -*-
require 'sinatra'
set :bind, '0.0.0.0'
puts "WOOT a puts statement was HERE"
get '/' do
  "hello world"
end

経由でこれを実行する
bundle exec ruby app.rb
putsステートメントと予想されるsinatraの動作の両方をレンダリングします。

ただし、同じ実行コマンドを使用してDockerコンテナー内で同じコードを実行すると、Sinatra出力のみが表示されます。 putsステートメントがレンダリングされることはありません。

ただし、「puts」ステートメント以外のすべてにコメントを付けてdockerで実行すると、putsステートメントは正しくレンダリングされます。 Dockerの動作の違いは、sinatraが必要かどうかに依存しているようです。

ここで簡単なものが欠けているようです。 何か案は?

最も参考になるコメント

ファイルの先頭近くに$stdout.sync = true設定すると、問題が解決しました。

全てのコメント4件

@singramこれは、IOがDockerコンテナにバッファリングされる方法に関係していると確信しています。 スニペットの先頭にputs "here"を追加すると、両方のステートメントが出力されることがわかります。

ファイルの先頭近くに$stdout.sync = true設定すると、問題が解決しました。

ありがとう! それは私にとってもトリックでした( $stdout.sync = true )。 他の人のためにどこかにドキュメントにあると便利でしょう。

私の感謝も共有したかっただけです! $stdout.sync = trueはプットのために働いた。 今日はstdoutフラッシュについても学びました。 乾杯!

このページは役に立ちましたか?
0 / 5 - 0 評価