2013-04-19 1 views
7

私のCSSまたはJSアセットの最大年齢値を設定するためにレールを取得できません。私たちはレール3.1を走らせていますが、アップグレードされているので、明らかにいくつかの設定が欠落している可能性があります。この時点で、私は真実から偽へと見つけ出すことができるほとんどの設定を裏返してしまいました。Railsアセットキャッシング - 設定する最大の年齢を取得できません

は、ここに私の現在の環境/ production.rb

Ventura::Application.configure do 
    # Settings specified here will take precedence over those in config/application.rb 

    # Code is not reloaded between requests 
    config.cache_classes = true 

    # Full error reports are disabled and caching is turned on 
    config.consider_all_requests_local  = false 
    config.action_controller.perform_caching = true 

    # Configure static asset server for tests with Cache-Control for performance 
    config.serve_static_assets = false 
    config.static_cache_control = "public, max-age=3600" 

    # Compress JavaScripts and CSS 
    config.assets.compress = true 

    # Don't fallback to assets pipeline if a precompiled asset is missed 
    config.assets.compile = true 

    # Generate digests for assets URLs 
    config.assets.digest = true 

    # Defaults to Rails.root.join("public/assets") 
    # config.assets.manifest = YOUR_PATH 

    # Specifies the header that your server uses for sending files                                                                           
    # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache 
    # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx 

    # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. 
    # config.force_ssl = true 

    # See everything in the log (default is :info) 
    # config.log_level = :debug 

    # Use a different logger for distributed setups 
    # config.logger = SyslogLogger.new 

    # Use a different cache store in production 
    # config.cache_store = :mem_cache_store 

    # Enable serving of images, stylesheets, and JavaScripts from an asset server 
    # config.action_controller.asset_host = "http://assets.example.com" 

    # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added) 
    # config.assets.precompile += %w(search.js) 

    # Disable delivery errors, bad email addresses will be ignored 
    # config.action_mailer.raise_delivery_errors = false 

    # Default mailer URL 
    config.action_mailer.default_url_options = { :host => 'http://ventura-production.herokuapp.com/'} 

    # Enable threaded mode 
    # config.threadsafe! 

    # Enable locale fallbacks for I18n (makes lookups for any locale fall back to 
    # the I18n.default_locale when a translation can not be found) 
    config.i18n.fallbacks = true 

    # Send deprecation notices to registered listeners 
    config.active_support.deprecation = :notify 
end 

であり、これは私が私が思うに、正しく資産を含めています、私のapplication.rb

# Enable the asset pipeline 
config.assets.enabled = true 

# Version of your assets, change this if you want to expire all your assets 
config.assets.version = '1.0' 

# Don't load resources when precompiling 
config.assets.initialize_on_precompile = false 

です。ここでは例です:<%= javascript_include_tag "client/jquery", "client/jquery-ui-1_8_18", "client/bootstrap_min", "client/jquery-select-menu", "client/jquery_tablesorter", "client/jquery_tablesorter_pager", "client/application" %>

そして、任意のページのご要望に応じて部分的にトレース:

cache: [GET /assets/client/jquery-ui-1_8_18-d903da4c219079ca31f0ea1b23f89afc.css] fresh 
cache: [GET /assets/client/bootstrap-2186f501bbd967564f2793c1c30aebc8.css] fresh 
cache: [GET /assets/client/rg-5f04e577cfffd5dbcb8a1735ad211bd9.css] fresh 
cache: [GET /assets/client/custom_charts-63eaad73c206c7ce6616c7f718be783f.css] fresh 
cache: [GET /assets/client/bootstrap_min-afbee53fdd364c866cbd15abd6473012.js] fresh 
cache: [GET /assets/client/jquery-select-menu-f2a3776430c5b4ead15173d0247f3f11.js] fresh 
cache: [GET /assets/client/jquery_tablesorter-7fc613e34c891c852e2932f59bf91368.js] fresh 
cache: [GET /assets/client/jquery_tablesorter_pager-141a886e7f35eb9f662b865516b23eca.js] fresh 
cache: [GET /assets/client/jquery-689ca6a49fcbd1c3777b13d1abcc1316.js] fresh 
cache: [GET /assets/client/application-6a61f272dd6a1ff7b5587435e67cd1bf.js] fresh 

私はこれらすべてが、すべてのページ・ロードに乗っ避けることができるはずです。 Rails Configuration Guide(強調鉱山)から

+1

これは予定リストにある必要がありますか?これは1行または2行のコードを置き換えるものです。 –

+1

URLでハッシュダイジェストを持つアセットを提供している場合は、Apache/Nginxレベルでキャッシングを行ったと考えていますか?そうすれば、遠い将来キャッシュの有効期限を設定できます。それとも、開発のキャッシングに関心がありますか? –

+0

@StuartM私たちは英雄で動いていて、私がここにいるのと同じように行動しています。私の理論は、私がそれを修正するならば、私はそれを両方のために修正します。 –

答えて

6

を(はい、私は私のto-doリストの上に、ローカルに最もjqueryのものをホストしていなければならない):

config.serve_static_assetsは、静的な資産を提供するためにレール自体を構成します。デフォルトはtrueですが、アプリケーションを実行するために使用されるサーバーソフトウェア(NginxやApacheなど)は静的資産を代わりに提供するため、本番環境ではオフになります。デフォルト設定とは異なり、WEBrickを使用して実行中(絶対におすすめしません!)またはプロダクションモードでアプリをテストするときはtrueに設定してください。 それ以外の場合は、ページキャッシュを使用できなくなり、パブリックディレクトリの下に定期的に存在するファイルのリクエストがRailsアプリケーションにヒットします。

まだ設定していない場合は、config.serve_static_assets = trueを設定してみます。

更新は:いくつかのコンフィグ設定は設定/環境/ production.rbに更新されなければならない静的な資産を、アプリケーションが正常に機能するようにできるように無効にし、更新するには

Heroku Dev Centerもこれを推奨しています。 Railsがserve_static_assets設定のアセットを提供できるようにします。

+1

だから、 'serve_static_assets = true'を設定しました。キャッシュレスの応答がまだ表示されます。 –

+0

cURLコマンドをテストするときに同じことが表示されますか?たとえば、「curl -I http:// your-host/path/to/asset'」のように、応答にはどのようなヘッダがありますか? –

+2

私は訂正しました。これを絞り込むと同時に、この解決策は働いています。 chromeとfirefoxが保存している最大の年齢の値は0です。ブラウザーにすべての負荷が新鮮であるかどうかをチェックさせる方法はありませんか?だから、応答はmax-age = 3600のサーバから戻ってきますが、chromeとfirefoxはすべてのページを読み込みます。 –

関連する問題