From: usa@... Date: 2015-06-12T12:17:14+00:00 Subject: [ruby-dev:49075] [Ruby trunk - Feature #11218] File.open FILE_SHARE_DELETE Issue #11218 has been updated by Usaku NAKAMURA. File::SHARE_DELETE で入れました。 シンボルによる指定は、自分でもいまいちだと思っていたのでオミットしています。 ---------------------------------------- Feature #11218: File.open FILE_SHARE_DELETE https://bugs.ruby-lang.org/issues/11218#change-52880 * Author: Yui NARUSE * Status: Closed * Priority: Normal * Assignee: ---------------------------------------- fluentdという、OSSのログコレクタがあるのですが、これには`in_tail`プラグインというものがあります。 これは、ログファイルを監視して、ログがファイルに追記されたらその分を読み込んでJSONにして他に流します。 このログファイルはfluentdではない他の誰か、ApacheだったりRailsだったりします。 この手のログファイルを書いていく流儀はいくつかありますが、ご存じの通りRailsやApacheは基本的に特定のパスにひたすら追記し続け、 それでは肥大化しすぎるのでlogrotateなどと組み合わせて適宜rotateしていく運用が一般的でしょう。 つまり、ログファイルをrenameし、ApacheやRailsなどにsignalで再起動して新しいファイルに書くわけです。 ところで、Windowsは誰かが開いているファイルをrenameすることはできないので通常このようなことは出来ません。 やるにはファイルを開く際の`CreateFile`に`FILE_SHARE_DELETE`フラッグをつけてやる必要があります。 そんなことやってる人いるのかというご指摘もあるとは思いますが、やる人はやっているようです。 https://issues.apache.org/jira/browse/HADOOP-8564 さて、RubyのWindowsの`open(2)`ラッパー、`rb_w32_open`/`rb_w32_wopen`はテキストモードの場合は`_open`/`_wopen`を使っており、 これはおいておくとして、バイナリモードの場合は`CreateFile`を使っているものの現状`FILE_SHARE_DELETE`は渡していないので、 なんらかの手段で`FILE_SHARE_DELETE`を付けられるようになりませんか。 ---Files-------------------------------- share_delete.patch (2.9 KB) -- https://bugs.ruby-lang.org/