6

Railsアセットパイプラインに関する多くの投稿や記事、質問と回答を読みましたが、キャッシュを完全にオフにする方法がまだわかりません。

Rails 3.2.11を使用しており、ラボ環境(開発と同様)では、アセットパイプラインでアセットを事前コンパイルまたはフィンガープリントしていないにもかかわらず、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/ですか?

4

3 に答える 3

8

アセットキャッシュをオフにするには:

config.assets.cache_store = :null_store

それがconfigであることに注意してください。Railsconfig.cache_storeではなくassets.cache_store。

また、Sassにはコンパイル済みスタイルシート用の個別のキャッシュがあり、デフォルトではtmp/cache/sassにあります。無効にする場合は、個別に行う必要があります。

config.sass.cache = false

ボーナスの質問に答えるために、Railsガイドが言うとき:

デフォルトのRailsキャッシュストアは、開発および本番環境でアセットをキャッシュするためにSprocketsによって使用されます。

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

于 2013-03-13T18:53:20.887 に答える
-1

これは XY 問題のように聞こえます。

原則 1:ビルドは決定論的であり、環境ごとの構成から独立している必要があります。

原則 2:静的アセットのコンパイルはビルドの一部である必要があります。

純粋に静的な資産を持つ方向に進む必要があります。asset_pathERB を使用できますが、決定論的であり、同じコードベースで同じ結果を生成する のようなメソッドを呼び出すためだけに使用できます。構成ベースのデータまたは動作をそこに入れることができますが、データまたは動作がすべての展開 (開発、テスト、ステージング、qa、本番前、および本番) で同じである場合に限ります。

環境ごとの構成に由来するものはすべて、静的アセットに入る必要はありません。<html>代わりに、HTTP ヘッダー、要素の属性、またはその他の注入手法で配信できます。静的アセット コードは、HTTP ヘッダーまたは属性に挿入されたデータを探し、その挿入されたデータに<html>基づいて動作を変更できるほどスマートである必要があります。

おまけの質問に関してconfig.cache_storeは、スプロケット、サス、コンパスなどのキャッシュの制御構成アイテムではありません。

于 2013-03-13T06:43:42.950 に答える
-1

アセット パイプラインを完全に無効にするには、環境ファイルに次のディレクティブを追加します。

config.assets.enabled = false

しかし、静的 JS と CSS のアセット パイプラインのコンパイルとキャッシングを楽しみ、同時に動的アセットに ERB ファイルを使用したい場合は、my_assets_controller動的コンテンツ (拡張子.css.erb.js.erb)。ビューまたはレイアウトファイルに含めるだけです<%= javascript_path '/my_assets/things_dynamically_generated.js' %>

于 2013-03-13T06:13:45.957 に答える