LoginSignup
11
10

More than 5 years have passed since last update.

PHPerがつまづいたRubyの仕様

Posted at

スクリプトの実行ログとしてファイルへの書き込みをしたい時。
PHPだと

$fp = fopen('/var/tmp/hoge.txt', 'w');
while(true) {
    // action
    fwrite($fp, 'actionのログ');
}
fclose($fp);

みたいにやっていた。
細かいところはおいておいて、tail -f /var/tmp/hoge.txt とかで回しておけば、どんぐらい進んだかが一目瞭然。

で、同じような感覚で ruby で書いてみた

fp = File.open('/var/tmp/hoge.txt', 'w')
list.each do |val|
  # action
  fp.write('actionのログ')
end
fp.close

ログがつらつら流れることを期待して tail -f /var/tmp/hoge.txt を叩いてみる。
が、流れてこない。
で、処理が全部終わったらドカッとログが出現。
ということは、ruby だと close するまでは実際にはファイルに書き込みをしないということか...

で、ちょいちょい調べてみたら

fp = File.open('/var/tmp/hoge.txt', 'w')
list.each do |val|
  # action
  fp.write('actionのログ')
  fp.flush
end
fp.close

のように flush メソッドを叩けばいけるらしい。なるほど...

11
10
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10