0

モバイル デバイスから頻繁にアクセスされる Rails アプリケーションがあるため、デバイス上のアセットを積極的にキャッシュすることを検討しています。私が直面していることの 1 つは、アセット パイプラインを有効にしてキャッシュを使用するという問題です。

stylesheet_link_tagで:cacheオプションを trueに設定すると、サーバーが*=require_treeを含む application.css ファイルを見つけられないという問題が発生します。すべての css ファイルをロードするディレクティブ。

No such file or directory - Asset file not found at '.../public/stylesheets/application.css'

私はこの問題を調査しており、css/js ファイルのキャッシュに関心がある場合は、アセット パイプラインを使用するのではなく、静的アセットを提供する必要があるという多くの情報を目にしています。それはそれで良いのですが、アセット パイプラインがいかに素晴らしいかということをよく耳にします。

私の質問は次のとおりです。アセット パイプラインの縮小化の側面を利用しながら、ブラウザに css/js ファイルをキャッシュさせる方法はありますか?

4

1 に答える 1

1

はい。js および css タグの宣言で cache: true を使用しないでください。本番モードでは、アセットをプリコンパイルする必要があり、それらのアセットは Web サーバーによって提供されます。コンパイルされたアセットには最後にフィンガープリントがあるため、将来的にアセットを更新すると、そのフィンガープリントが変更されるため、ファイル名が変更され、ブラウザーが新しいファイルを取得することが保証されます。したがって、アセットに積極的なキャッシュ方法を使用するように Web サーバーを構成できます。アセットがどのように機能するかを正確に理解するには、アセットの Rails ガイドをお読みください。4.1.1 セクションまでスクロールすると、次のテキストが表示されます。

4.1.1遠い将来の Expires ヘッダー

プリコンパイルされたアセットはファイル システムに存在し、Web サーバーによって直接提供されます。デフォルトでは、遠い将来のヘッダーはありません。そのため、フィンガープリントの利点を得るには、サーバー構成を更新して追加する必要があります。

アパッチの場合:

# The Expires* directives requires the Apache module `mod_expires` to be enabled.
<Location /assets/>
  # Use of ETag is discouraged when Last-Modified is present
  Header unset ETag
  FileETag None
  # RFC says only cache for 1 year
  ExpiresActive On
  ExpiresDefault "access plus 1 year"
</Location>
于 2013-09-19T20:44:24.950 に答える