Rails asset_host, cloudfront y heroku

3

Estoy ejecutando una aplicación rails 4.0 en heroku y por mi vida no puedo obtener mis URL de activos usando el host que configuré en asset_host.

Creo que mi configuración de frente en la nube es buena porque puedo sustituir en mi URL de frente a la nube por cualquiera de mis URL de activos y el archivo se toma de heroku y se almacena en caché en frente a la nube.

Entonces https://xxxxxxxxxxxx.cloudfront.net/assets/application-xxxxxxxx.js está almacenando en caché https://myapp.com/assets/application-xxxxxxxxx.js correctamente.

El problema parece ser que mi asistente de activos, como javascript_include_tag, nunca usa la configuración asset_host en staging.rb.

Todo lo que veo cuando cargo mi página son todos mis archivos js y css que se sirven desde https://myapp.com/assets/

Mi configuración de ensayo se ve así:

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

  # Disable Rails's static asset server (Apache or nginx will already do this)
  config.serve_static_assets = true

  # 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
  #config.assets.digest = false

  #config.assets.initialize_on_precompile = true

  config.static_cache_control = "public, max-age=31536000"

  # user Amazon Cloudfront for asset hosting
  config.action_controller.asset_host = "https://xxxxxxxxxxxx.cloudfront.net"

¿Existe una combinación mágica de ajustes de configuración que de alguna manera se me ha escapado?

5
  • ¿Ha intentado eliminar https://del valor asset_host? 22 de marzo de 2014 a las 10:56
  • 1
    Gracias por la sugerencia Rich, pero he descubierto el problema y lo describí a continuación. 22 de marzo de 2014 a las 12:36
  • Bien, ¡me alegro de que lo hayas arreglado! Yo voté por ti :) 22 de marzo de 2014 a las 12:36
  • También recomiendo no usar staging.rb devcenter.heroku.com/articles/… 24 de marzo de 2014 a las 17:29
  • Gracias por el consejo @Schneems, que suena sensato y fácil de implementar. 25 de marzo de 2014 a las 0:52
4

Ok, finalmente descubrí lo que estaba pasando: mi aplicación estaba usando la gema rails_api, que elimina un montón de middleware de la pila de rieles estándar.

Cambiando mi controlador de aplicación a la clase ApplicationController <ActionController :: Base agregada nuevamente en el middleware requerido, y asset_host comenzó a funcionar inmediatamente. Investigaré más para determinar qué middleware es más tarde y decidiré si quiero volver a rails_api.

Un problema más que descubrí fue que rack-mini-profiler reescribe los encabezados de la caché para revalidarlos siempre, negando así la mayor parte del beneficio de la cdn. ¡Ahora lo he desactivado en la puesta en escena y la producción y mi aplicación se está ejecutando con mucha más rapidez!