2013-04-19 11 views
7

Ho problemi a trovare i binari per impostare il valore massimo per qualsiasi mio asset CSS o JS. Stiamo eseguendo le rotaie 3.1, ma abbiamo eseguito l'aggiornamento in modo tale che mi manchi molto probabilmente alcune parti ovvie di configurazioni. A questo punto, ho invertito la maggior parte delle configurazioni che posso trovare da vero a falso e viceversa senza fortuna.Cache delle risorse dei binari - impossibile impostare il limite massimo per l'età

Ecco il mio attuale ambiente/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 

e questo è a mio 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 

Sto includendo le attività in modo corretto, credo. Ecco un esempio: <%= 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" %>

E una traccia parziale su richiesta di una data pagina:

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 

dovrei essere in grado di evitare tutti questi ottiene in ogni pagina-carico. (E sì, non dovrei ospitare più roba jquery a livello locale, sulla mia lista di cose da fare)

+1

Deve essere presente anche in un elenco di cose da fare? Sostituisce una linea o due di codice. –

+1

Se stai servendo asset con digest di hash nell'URL, hai considerato di fare solo la cache a livello di Apache/Nginx? In questo modo è possibile impostare la scadenza della cache a lungo termine. O ti preoccupi solo del caching in fase di sviluppo? –

+0

@StuartM Stiamo eseguendo su heroku, e vedendo lo stesso comportamento in prod come sono qui in sviluppo. La mia teoria è che se lo aggiusto per uno, lo aggiusto per entrambi. –

risposta

6

Dal Rails Configuration Guide (sottolineatura mia):

config.serve_static_assets configura Rails stesso per servire beni statici. Il valore predefinito è true, ma nell'ambiente di produzione viene disattivato poiché il software server (ad esempio Nginx o Apache) utilizzato per eseguire l'applicazione deve invece servire risorse statiche. A differenza dell'impostazione predefinita, imposta su true quando è in esecuzione (assolutamente sconsigliato!) O prova la tua app in modalità produzione usando WEBrick. Altrimenti non sarai in grado di utilizzare il caching della pagina e le richieste di file che esistono regolarmente nella directory pubblica raggiungeranno comunque la tua app Rails.

Vorrei provare a impostare config.serve_static_assets = true se non l'hai già.

Aggiornamento: Il Heroku Dev Center raccomanda anche questo:

Per consentire l'applicazione per servire adeguatamente, invalida e aggiornare le attività statiche diverse impostazioni di configurazione devono essere aggiornati in config/ambienti/production.rb. Consenti a Rails di servire le risorse con l'impostazione serve_static_assets.

+1

Quindi, ho impostato 'serve_static_assets = true'. Ancora vedendo risposte senza cache. –

+0

Stai vedendo lo stesso durante il test di un comando cURL? Ad esempio, 'curl -I http: // your-host/path/to/asset', quali intestazioni sono nella risposta? –

+2

Sono stato corretto.Cercando di restringere questa soluzione, questa soluzione è funzionante. Il valore max-age di Chrome e Firefox, tuttavia, continua a essere pari a 0. Non c'è modo di impedire ai browser di controllare se ogni risorsa è aggiornata su ogni carico? Quindi vedo la risposta che ritorna dal server con max-age = 3600, ma chrome e firefox eseguono il caricamento di ogni pagina. –

Problemi correlati