2009-06-07 13 views
1

10分ごとにいくつかのXMLフィードを解析し、render: fileメソッドを使用してRailsプロジェクトのすべてのページに含める部分的な作業を作成しました。問題は、明らかに、サーバーが再起動するまで更新されないことです。Railsで外部から変更されたファイルをレンダリングする

とにかく、このファイルを毎回強制的に更新するにはどうすればよいですか?

ありがとうございます。

答えて

2

あなたはレンダリング(:ファイル)を悪用していると思います。これは間違いなくそれがどのように使用されることが意図されていません。部分的なレンダリングは、データロード手法ではなく、複数の場所でerb(または使用するテンプレートlang)コードをレンダリングするために使用されるはずです。あなたは動的に変化するデータを読み込むためにそれを使用しています。

あなたが実際にやろうとしているのはフラグメントキャッシュですが、それ以上のコンテキストがなければ、私は間違っている可能性があります。おそらく、あなたのcronジョブを使用すると、キャッシュに探しているフラグメントを作成するスクリプト/ランナースクリプトを実行しますhttp://www.railsenvy.com/2007/3/20/ruby-on-rails-caching-tutorial-part-2

:フラグメントキャッシュ上の偉大なウォークスルーについては

ここでベースがオフの場合は、読み込んでいるファイルの種類と達成しようとしていることを明確にしてください。代わりに

+0

私は同意します。フラグメントキャッシュのような音が働きます。 cronジョブがフラグメントキャッシュを期限切れにした後、erbが実行され、次に表示されるときにキャッシュされます。 – Shadwell

1

これは、プロダクションモードでは、すべてのクラスとビュー/パーシャルがキャッシュされるためです。この問題を解決するには、フラグメントキャッシングブロック内にパーシャルをレンダリングし、ブロックコンテンツをリフレッシュするときにメソッドexpire_fragmentを使用します。他の方法では、開発モードに切り替えることができますが、アプリケーションを遅くするでしょう。

+2

ソリューションは確かに開発中のアプリを実行していません。それはひどい考えです。それほど恐ろしい、しかしまだひどい考え方は、プロダクションでクラスの再読み込みをオンにすることですが、これはかなり最悪の場合のシナリオです。 –

6

用途:

render :inline => File.read(file_name), :layout => true 
関連する問題