1

次の Ruby/Rails コードがあります。

file = File.new("#{folder}/conf.txt", 'a+')
file.write(content)
file.close

問題は、時々このファイルが作成されますが、 content 変数が空ではないことは確かですが、空です (コードの別の部分でも使用されています)。

ファイルが書き込まれたことを確認するにはどうすればよいですか? これは私のアプリケーションの重要なステップであるため、記述できなかった場合は、例外または何らかのエラーを取得したいと考えています。

4

2 に答える 2

3

元のデータから往復してファイルに書き込み、ファイルから読み取ります。元のコンテンツと一致する場合は、確認できます。

于 2012-10-19T16:51:45.327 に答える
0

質問に答えてくれたみんなに感謝し、注意を怠って申し訳ありませんが、質問を投稿してから 1 日後、Apache ログで次のようなエラーに気付き始めました (私は Passenger + Apache を使用しています)。

[ pid=21526, timestamp=1350608946 ] Process aborted! signo=SIGABRT(6), reason=SI_TKILL, signal sent by PID 21526 with UID 0, backtrace available.
--------------------------------------
[ pid=21526 ] Backtrace with 34 frames:
PassengerHelperAgent[0x525668]
/lib64/libpthread.so.0(+0xf4c0)[0x7fcabb2014c0]
/lib64/libc.so.6(gsignal+0x35)[0x7fcaba7059a5]
/lib64/libc.so.6(abort+0x175)[0x7fcaba707185]
big backtrace...

この問題について検索しましたが、同様の問題/バックトレースを持っている人を見つけることができませんでした。

それら、私は Passenger + Nginx に移行することにしました。

1 週間後、問題は解消されました。1 日に 1 回か 2 回発生していたことが、Nginx では 1 回も発生しませんでした。同じコード (まったく更新なし) と同じマシン。

この問題を再現することはできませんが、調査中に「File.close」メソッドを使用していくつかのテストを行いました。ファイルに書き込めない場合は常に例外がスローされます。

残念ながら、私はこの問題を掘り下げるのに十分な経験がなく、Nginx + Passenger にかなり満足しています。

于 2012-10-27T18:54:19.460 に答える