2017-09-12 19 views
0

ほとんどのビューで使用される基本レイアウトファイルがあります。ベースレイアウトでは、grailsリソースプラグインを使用するモジュールが必要です。cssファイルが変更されたときにブラウザがcssファイルをキャッシュしないようにするにはどうすればよいですか?

<r:require module="core"/> 

モジュールは今ここに問題がある

modules = { 
    core { 
     resource url: '/css/main.css' 
     resource url: 'js/application.js' 
    } 
} 

としてのconf/ApplicationResources.groovyファイルで定義されています。私はmain.cssファイルに変更を加え、アプリケーションをビルドします。変更はブラウザに反映されません。ソースを表示してからcssファイルをクリックし、そのcssファイルを更新すると更新されます。ブラウザはcssファイルをキャッシュします。私は上記のコードにバージョンを追加しようとしました

modules = { 
    core { 
     resource url: '/css/main.css?version=2' 
     resource url: 'js/application.js' 
    } 
} 

これも動作しません。生成されたCSSのリンクタグを見ると、CSSファイルが

<link href="/app/static/bundle-bundle_core_head.css" type="text/css" rel="stylesheet" media="screen, projection" /> 

であることがわかります。なぜバージョンが機能していないのかが分かります。私は最後の手段として試しました

<link href="/app/static/bundle-bundle_core_head.css?version=2" type="text/css" rel="stylesheet" media="screen, projection" /> 

最終的にCSSファイルが更新されました。しかし、私はこのソリューションはハックだったので使用できません。

私の質問は、cssファイルがgrailsリソースプラグインを使用している間にcssファイルを変更すると自動的に更新される方法です。

リソースプラグイン

http://grails.org/plugin/resources

私が使用していますGrailsのバージョンは2.2で、リソースプラグインのバージョンは1.1.6です。

答えて

0

Apache Webサーバーを使用している場合は、.htaccessファイルを使用できます。ファイルを指定すると、キャッシュされません。

<Files main.css> 
FileETag None 
Header unset ETag 
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" 
Header set Pragma "no-cache" 
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT" 
</Files> 
+0

私はTomcatを使用しています。 – kofhearts

0

実用的なアプローチ(すべてaproachesが失敗した場合)(例えばbundle-bundle_core_head_vjfiduht.css)に変更されたCSSファイルの名前を変更する可能性があります。そうすれば、ブラウザはファイルを認識せず、確実にロードしようとします。一方

prod内のリソースプラグインを使用すると、grails.resources.mappers.hashandcache.enabled = false経由でオフになっていないことを考えると(配信リソースの名前のハッシュ値を使用する必要があります

関連する問題