[ruby-dev:49372] [Ruby trunk - Feature #11715] Tempfile.create unlinked file silently fails
From:
co000ri@...
Date:
2015-11-20 01:37:17 UTC
List:
ruby-dev #49372
Issue #11715 has been updated by Yuki Kurihara.
納得しました。ありがとうございました。
----------------------------------------
Feature #11715: Tempfile.create unlinked file silently fails
https://bugs.ruby-lang.org/issues/11715#change-54981
* Author: Yuki Kurihara
* Status: Rejected
* Priority: Normal
* Assignee:
----------------------------------------
ファイルを作成してデータを書き込んでから読み込んで利用するプログラムにおいて、
全て書き込み終わるまでは他のプロセスからアクセスされたくないので、
ファイルをアトミックに作成する方法として、Tempfileに一旦書き込んでからrenameする方法が使われています。
https://github.com/rails/rails/blob/7e62a65e18d1e97debfa1c6215b7541157489115/activesupport/lib/active_support/core_ext/file/atomic.rb#L19-L51
似たようなことをしたい場合、
Tempfile.openでは、以下の場合エラーが発生しませんが、
~~~
Tempfile.open("foo") do |f|
f.close
File.rename f.path, "bar"
end
~~~
Tempfile.createの場合はエラーになります。
~~~
Tempfile.create("foo") do |f|
f.close
File.rename f.path, "bar"
end
#=> Errno::ENOENT: No such file or directory
~~~
Tempfile.createでもエラーが発生しないようになると、
ライブラリーなどの挙動を変えずに、より両者で似たような挙動を期待できるようになるのではないでしょうか。
それとも意図された挙動なのでしょうか。
エラーが発生しないように修正したパッチを添付します。
---Files--------------------------------
tempfile.patch (947 Bytes)
--
https://bugs.ruby-lang.org/