2013-04-19 12 views
7

Mam problem z uzyskaniem szyn, aby ustawić wartość maksymalnego wieku dla dowolnego z moich zasobów CSS lub JS. Pracujemy na szynach 3.1, ale uaktualniliśmy, więc prawdopodobnie brakuje mi oczywistych elementów konfiguracji. W tym momencie przerzuciłem większość konfiguracji, które można znaleźć od prawdziwej do fałszywej iz powrotem, bez powodzenia.Buforowanie zasobów Railsów - nie można uzyskać maksymalnego wieku do ustawienia

Oto mój obecny środowisko/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 

I to jest w moim environment.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 

jestem w tym aktywa poprawnie, myślę. Oto przykład: <%= 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" %>

i częściowego ślad na żądanie każdej strony:

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 

powinienem być w stanie uniknąć wszystkich tych dostanie się na każdej stronie obciążenia. (I tak, ja nie powinien obsługiwać większość jquery rzeczy lokalnie, na mojej liście rzeczy do zrobienia)

+1

Czy powinno to być nawet na liście spraw? Zastępuje linię lub dwie z kodu. –

+1

Jeśli udostępniasz zasoby z hashami skróconymi w adresie URL, czy rozważałeś właśnie buforowanie na poziomie Apache/Nginx? W ten sposób możesz ustawić termin wygaśnięcia pamięci podręcznej w przyszłości. A może interesuje Cię buforowanie w rozwoju? –

+0

@StuartM Pracujemy na Heroku i widzimy to samo zachowanie podczas pracy nad rozwojem. Moja teoria jest taka, że ​​jeśli naprawię ją na jedną, naprawię ją dla obu. –

Odpowiedz

6

Z Rails Configuration Guide kopalni (nacisk):

config.serve_static_assets konfiguruje się Rails służyć aktywa statycznych. Domyślnie jest to prawda, ale w środowisku produkcyjnym jest wyłączone, ponieważ oprogramowanie serwera (np. Nginx lub Apache) używane do uruchamiania aplikacji powinno służyć zamiast niej zasobom statycznym. W przeciwieństwie do ustawień domyślnych ustaw to na true podczas pracy (absolutnie nie jest to zalecane!) Lub testuj swoją aplikację w trybie produkcji za pomocą WEBrick. W przeciwnym razie nie będzie można korzystać z buforowania stron, a żądania dotyczące plików, które istnieją regularnie w katalogu publicznym, będą trafiać w aplikację Rails.

Chciałbym spróbować ustawić config.serve_static_assets = true, jeśli jeszcze tego nie zrobiłeś.

Aktualizacja: The Heroku Dev Center zaleca również to:

Aby umożliwić stosowanie właściwie służyć, unieważnia i odświeżyć zasoby statyczne kilka ustawień konfiguracyjnych muszą być aktualizowane w config/środowiskach/production.rb. Pozwól, aby Railsy wyświetlały zasoby z ustawieniem serve_static_assets.

+1

Tak, ustaw "serve_static_assets = true". Nadal nie widzę odpowiedzi w pamięci podręcznej. –

+0

Czy widzisz to samo podczas testowania polecenia cURL? Np. 'Curl -I http: // twój-host/path/to/asset', jakie nagłówki znajdują się w odpowiedzi? –

+2

Poprawiam się.Próbując to zawęzić, to rozwiązanie działa. Wartość maksymalnego wieku, którą przechowują chrom i firefox, nadal wynosi 0. Czy nie ma sposobu, aby przeglądarki nie sprawdzały, czy każdy zasób jest świeży przy każdym obciążeniu? Więc widzę, że odpowiedź wraca z serwera z max-age = 3600, ale chrome i firefox robią to na każdym ładowaniu strony. –

Powiązane problemy