私のRuby on Railsアプリケーションでは、(Javaアプリケーションを介して)ファイルに書き込みを行い、書き込まれたファイルを読み込むルーチンを持っています。ファイルの書き込みは非同期で行われますか?
write_to_file(file.path, data)
read_file(file.path)
ほとんどの場合、これは大丈夫です。しかし、ファイル書き込みが起こらなかったように見えますが、エラーもありませんでした。そして、同じデータを使ってルーチンを再試行すると、そのたびにうまくいきました。
私は、ファイルの書き込みが非同期的に発生し、データがディスクに書き込まれる前に、ファイルが実際に読み込まれている場合だと思うし始めています。これは可能でしょうか?
write_to_file
は書き込みの世話をするソケット接続を介してJavaアプリケーションを呼び出します。 Javaアプリケーションは単純なjson文字列をRailsに返します。
私はちょうどその答えに 'sleep'を使って回避策を追加しました。 –
ありがとうございます。 'File.readable?'で十分ですか?つまり、私のプロセスはファイルを読み取ることができましたが、コンテンツは更新されていません。 Javaアプリケーションは、新しいファイルを作成するのではなく、既存のファイルを変更しています。ファイルのタイムスタンプを調べて、ファイルが実際に更新されたかどうかを判断する必要がありますか? – Mika
Hmm ..ファイルのタイムスタンプには秒が含まれています。これはすべて1秒で起こります。そしてJavaアプリケーションでは、Apache POIの関数を使用してExcelファイルを更新します。だから、それはPOIがファイルをどのように保存するかを本当に沸かせます。 – Mika