2013-03-13 7 views
6

Railsのアセットパイプライン で多くの投稿と記事、質問&の回答を読んだことがありますが、キャッシュを完全に無効にする方法はまだ分かりません。Rails 3.2.11のアセットパイプラインがキャッシュされないようにしますか?

私たちはRails 3.2.11を使用しています。私たちのLab環境(開発と同様)では、資産パイプラインのアセットをあらかじめコンパイルしたり指紋を印刷していなくてもキャッシュされていますRails(Rack?)キャッシュ。これは、アセットの一部が他の構成に基づいて変更されるERBであるため、キャッシュが古くなってしまうため、厄介です。私たちは、この設定を設定したキャッシュをオフにしようとするためには:

config.action_controller.perform_caching = false 

    config.assets.compress = false 

    config.assets.debug = true 

    # just in case 
    config.cache_store = :file_store, "file_cache" 

しかし、資産はとにかくtmp/cache/assetsに現れています。私は少なくとも彼らがfile_cacheに現れることを期待するだろうが、私は本当にそれらがまったくキャッシュされないことを期待している。

これらのアセットがキャッシュされないようにするにはどうすればよいですか?この環境では、単にキャッシュを削除するだけでは不十分です。

ボーナスに関する質問:これらのファイルがキャッシュされている限り、なぜtmp/にあり、file_cache/に含まれていないのですか?完全に無効資産パイプラインに

答えて

8

は、資産のキャッシュをオフにします。 アセット .cache_storeは、Railsのconfig.cache_storeではありません。

もサスがtmp/cache/sassではデフォルトで、コンパイルされたスタイルシートのための個別のキャッシュを持っていることに注意してください、とあなたは別にそれをしなければならないことを無効にしたい場合:

config.sass.cache = false 

ボーナスを答えるためにRails Guideは言う質問、:

デフォルトRailsのキャッシュストアは、開発中の資産をキャッシュするためにスプロケットによって使用され、製造。

に設定されていると思っていましたが、Railsキャッシュストアが使用されていました。私は間違っていました。アセットキャッシュを明示的に変更しない限り、のデフォルトのキャッシュはです。

+0

私のdevの設定ファイルから 'config.assets.digest = true'を削除することで、その資産がキャッシュを無効にしていないので誰かがここを見ている場合、私はその問題を解決しました。 – mltsy

-1

、お使いの環境ファイルでこのディレクティブを追加することができます。

config.assets.enabled = false 

をしかし、あなたはまだあなたの静的なJSとCSSのための資産のパイプラインのコンパイルとキャッシュを楽しみたい場合は、同じで動的資産用のERBファイルを使用する場合は、my_assets_controllerを作成し、動的コンテンツ(拡張子が.css.erbおよび.js.erbのファイル)を配信するコントローラのビューを作成できます。あなたのビューやレイアウトファイルに含めるだけです<%= javascript_path '/my_assets/things_dynamically_generated.js' %>

+0

ラボのアセットパイプラインから唯一必要なのは、ファイルシステム内のアセットを見つける機能ですが、本番ではすべてのキャッシュが必要です。自動的に(失敗した)キャッシュを回避するためだけに資産を再構築する必要はありません。 –

-1

これはXYの問題のようです。

原則1:ビルドは、環境ごとの構成に依存せず、決定的でなければなりません。

原則2:静的資産のコンパイルはビルドの一部でなければなりません。

純粋に静的な資産に移行する必要があります。 ERBを使用することはできますが、決定的で同じコードベースで同じ結果を返すasset_pathのようなメソッドを呼び出すだけです。すべてのデプロイメント(dev、test、staging、qa、pre-prod、およびprod)でデータまたは動作が同じである場合にのみ、コンフィギュレーションベースのデータまたは動作をそこに配置できます。

環境単位の設定に由来するものは、静的な資産には取り込まないでください。代わりに、HTTPヘッダー、要素の属性、またはその他のインジェクション技術で配信できます。静的資産コードは、HTTPヘッダーまたは<html>属性で注入されたデータを検索し、その注入されたデータに基づいてその動作を変更するのに十分スマートでなければなりません。

ボーナスの質問に関しては、config.cache_storeは、スプロケット、サス、コンパスなどのキャッシュの制御構成項目ではありません。それが設定されていること

config.assets.cache_store = :null_store 

注:

+0

私は、原則1と原則2の両方に同意せず、アセットパイプラインのキャッシュを無効にする方法の質問には答えません。 –

関連する問題