5

Antecedentes¿Cómo cambio el formato de las URL de asset_tag de Rails?

estoy trabajando actualmente en un proyecto de 3 carriles que tengo la intención de utilizar con Amazon CloudFront con un origen a medida que apuntan de nuevo a mi servidor web real. Esto significa que mi servidor web le dirá al navegador que recupere activos estáticos de CloudFront; si CloudFront tiene el elemento almacenado en caché, lo devolverá; si no lo hace, lo recuperará usando la misma ruta desde mi servidor web y luego lo almacenará en caché para el futuro peticiones.

Problema

Amazon CloudFront cae y hace caso omiso de los parámetros de cadena de consulta para determinar si se debe reventar su propia caché para volver a descargar el activo desde su origen. Esto obviamente plantea un problema con la forma en que Rails genera las URL con el RAILS_ASSET_ID que debe hacer: /assets/path/to/asset.ext?RAILS_ASSET_ID. Con las URL de activos predeterminadas, CloudFront conservará los activos obsoletos durante hasta 24 horas.

¿Solución?

Lo que espero hacer es anular alguna manera la forma en Rails 3 genera etiquetas de activos para que pueda generar URL como /assets/RAILS_ASSET_ID/path/to/asset.ext. Ya tengo una solución para hacer que el servidor web responda a esas URL, solo necesito descubrir cómo hacer que Rails genere la URL.

Notas

  1. Mi RAILS_ASSET_ID será una subcadena de mi último git commit hash. Configuración de esto será manejado por capistrano durante el proceso de implementación. Estoy bien con reventar todos los cachés de activos en cada implementación, no necesito ID de activo
  2. Ya he intentado anular ActionView::Helpers::AssetTagHelper.rewrite_asset_path pero no pareció funcionar y, por lo que he leído, es un documento privado método que no se debe confiar.
  3. ¡Gracias de antemano!

Respuesta

4

"Establezca ActionController::Base.config.asset_path en un proceso que tome la ruta del elemento no modificado y devuelva la ruta necesaria para que funcione el almacenamiento en memoria caché de los activos".

Eso es de la documentación AssetTagHelper.

+0

No estoy muy seguro de cómo me perdí esto, pero lo probaré lo antes posible. –

+0

He confirmado que esta es la solución, gracias por alertarme sobre lo obvio que de alguna manera me perdí. –

1

El asset_id plugin debería resolver su problema. Es compatible con Amazon S3 y CloudFront.

+0

Parece que este complemento requiere que utilice Amazon S3 como origen de CloudFront, lo cual no haré porque algunos activos se generan dinámicamente. Gracias, sin embargo, es un plugin ordenado que puede ser útil en un proyecto diferente. –

Cuestiones relacionadas