2011-12-19 3 views
3

私の資産ディレクトリに.js.erbファイルがあります。これはロケール固有の設定を読み込みます。単一のjsファイルのキャッシュを防止する

ただし、基本設定が変更された場合、新しいファイルは自分のブラウザに配信されていません。私は304が変更されないようになる。

空白を追加して.js.erbファイルを変更すると、新しいファイルが正しく配信されます。私が設定を追加するたびにそれを行うことは痛みになります。

この特定のファイルをキャッシュしないようにレールを設定する方法はありますか?

ありがとうございます。

編集:Done a bit more reading on the asset pipeline

「資産がコンパイルされ、サーバーが開始された後、最初の要求にキャッシュされているスプロケットがその後の要求で要求のオーバーヘッドを減らすために必須-再検証のCache-Control HTTPヘッダーを設定します - これらのブラウザ上。

マニフェスト内のファイルのいずれかが要求の間で変更された場合、サーバーは新しいコンパイル済みファイルで応答します。

ここでの問題は最初のリクエストがキャッシュされていることです。これは動的なjavascriptファイルです。おそらくこれがJavaScriptをインラインにキャッシュされないようにする唯一の方法ですか?

答えて

3

アセットパイプラインを使用しないように思えますが、キャッシングを促進することは非常に困難です。

アセットパイプラインと戦うのではなく、実際のコントローラを作成してから、キャッシュコントロールヘッダーを好みに合わせることができます。

app/views/controller_nameにjs.erbテンプレートがある場合、railsはそれをレンダリングするだけです。

あなたはJsControllerと呼ばれるコントローラを持っている場合たとえば、あなたはあなたのroutes.rbをファイルに

match '/javascripts/settings.js', :controller => :js, :action => :settings, :format => :js, :as => :setting_js 

を追加することができ、その後、あなたはその後、アプリ/ビュー/ JSの中で

をsettings.js.erbをすることができますスティック

= javascript_include_tag settings_js_path 
+0

コントローラーからjsをレンダリングする方法の良い例がありますか? .js.erbファイルはapp/viewsの下に置かれますか?どのようにするのが最善でしょうか?私はjavascript_include_tagがアセットパイプラインに向いていると推測しています。非常に多くの質問のためのお詫び、たくさんのグーグルで行われ、この周りに多くのドキュメントを見つけることができません... – Chris

+0

私はいくつかの説明を追加しました –

2

このファイルを処理するコントローラメソッドでこれを試しましたか?

+0

これはassetsディレクトリの下にあるjavascriptファイルです。だからAFAIKにはコントローラーがない。 Railsはサーバー側で提供されるファイルの最初のバージョンをキャッシュしているようです。 – Chris

関連する問題