From: siena@... (Siena. / SHINAGAWA, Norihide) Date: 2003-04-03T19:05:09+09:00 Subject: [ruby-list:37509] Re: Tmpfile.new がデフォルトで/tmpを利用すること Siena. です。 ▼ [ruby-list:37502] Re: Tmpfile.newがデフォルトで/tmpを利用すること 》|| DOSISH環境でSAFEレ 》|| ベル1以上でもcgi.rb(のマルチパート機能)が使いたいということ 》|| であれば、cgi.rbにtmpdirを指定するAPIを付加してTempfileを生 》|| 成する際に明示的に指定するしか方法はないと思います。 》| 》|が、そうしても結局[ruby-list:37479]のような反論がそのまま成立 》|するだけのような気もします。 はい、反論というか同様の主張をします ^^; [ruby-list:37499] は基本的に了解しているつもりですし、 [ruby-list:37500] も全面的に賛成です。 その上で、何とかできそうなら何とかしたいと模索しています。 その結果、やっぱり何ともならないという事であれば、少なくとも 環境依存するスクリプトができやすい現状だけでも改善したいです。 》DOSISHな環境でtempfileのようなのがそのまま動くことを期待する 》のは不可能ではないかと思います。 この点ですが、一般的なユーザにはどう理解されているのでしょうか。 あたしは、この件があって tempfile.rb を見るまでは Tempfile は デフォルトの動作で環境依存しないで動くと思ってしまっていました。 理由を推測すると、一時ファイルの作成はどのプラットフォームでも 一般的に行なわれる事である、Tempfile が標準添付で手軽に使える、 リファレンスマニュアルにも特に断り書きがない、という辺りでしょうか。 で、'/tmp' の縛りがある事に気付いた時は考えの至らなさに愕然と ^^; マニュアルにも '/tmp' を使う可能性は書かれています。 しかし、環境変数で指定できるという所で安心してしまって、 $SAFE > 0 だと環境変数は汚染されているから無視して '/tmp' を使う、というところまで頭が回っていませんでした。 tempfile.rb を理解した今は、(現状では) Tempfile を 使えるか否かは環境依存であるという事も理解できていますが、 それ以前のあたしにとっては意外な落とし穴でした。 # いや、恥ずかしい限りです ^^; で、その [ruby-list:37479] と重複しますが、こういう勘違い・ 理解不足は生じやすく、不注意に Tempfile を使うとこぞって環境依存に なるというのは、やはり何とかならないものかと思ってしまいます。 Ruby が完全なプラットフォーム中立を謳っていないとはいえです。 望ましくはないけれども環境依存せずにとりあえず動くというものにして、 * $SAFE > 0 の時は作業ディレクトリを明示的に 指定する事が望ましいとマニュアルに書いておく * Ruby -w で、$SAFE > 0 かつ作業ディレクトリの指定を 省略した場合、環境によっては動かない可能性を警告する などで、望ましいやり方へ誘導するというのが良さそうに感じます。 》可能な手段として思いつくのは.iniファイルのような「アプリケー 》ションごとの設定ファイル」という枠組みを用意することですが、 》それはそれで別の枠組みとして提供すべきではないか、そして、ポー 「別の枠組み」とは関係ないのですが、別の所でもらった意見に 「make 時に /tmp 相当を指定できるようにするのは?」というのがありました。 この場合、tempfile.rb そのものを書き換えて導入するとか、 Tempfile が rbconfig.rb に書かれたものを参照するとかになりそうです。 rbconfig.rb の信頼性も [ruby-list:37503] と同様、なのでしょう。 どういう実現方法をとるにしても。 "tempfile.rb の make 時" == "ruby の make 時" でしょうから、 これはバイナリパッケージには適した方法じゃないんですよね ^^; --- Siena.