Pregunta

Mi comprensión de la tubería de activos New Rails 3.1 en el modo de producción es la siguiente:->

  1. config.action_controller.asset_host = "https://mybucket.s3.amazonaws.com"
  2. config.assets.compile = false
  3. app/assets se registran en el repositorio
  4. Bundle Exec Rake Activos: Precompilar y sincronizar con S3 (todos los activos)
  5. public/assets no se registra en el repositorio

Con todo lo anterior, pensé que Rails buscaría todos los activos en S3 y no los necesito en el repositorio. O al menos no necesito el precompilado activo en public/assets en el repositorio.

He encontrado esto, en Heroku, si no tengo config.assets.compile = true, no encontrará los activos precompilados en S3. Y Heroku deber Ejecute una fase de compilación para todos los activos, pero luego los servirá fuera de S3. Correr heroku run rake assets:precompile no se pone en cuclillas. El proceso de producción volverá a compilar todo.

¿Eh? Eso no tiene sentido.

Me daría sentido que no necesite llenar su repositorio con imágenes, deje que su CDN haga el trabajo.

Tengo la sensación de que esto es incorrecto. ¿Estoy en lo correcto o incorrecto?

¿Fue útil?

Solución

Cuando tengas este conjunto:

config.assets.compile = false

No se pasarán solicitudes de activos a las ruedas dentadas para ser atendidas. Se espera que los archivos sean precompilados en alguna parte.

Revisar la Guía de configuración de la tubería de activos En el sitio de Heroku, ya que hay una configuración especial para que funcione.

Otros consejos

Definitivamente mira activo_sync en Github. O nuestro artículo de Heroku Dev Center en Usando un host de activo CDN con Rails 3.1 en Heroku.

Los problemas con Variables de entorno Recientemente han sido resueltos por un complemento de Heroku Labs, que hace que su aplicación heroku config Variables accesibles durante el tiempo de compilación. Para habilitar esto, lea sobre el user_env_compile enchufar. El medio que ya no tienes que correr heroku run rake assets:precompile después de implementar una aplicación.

También. Hay una gran mejora del rendimiento en el uso activo_sync VS dejar que su aplicación compile los activos perezosamente en la producción o al servicio de ellos precompilados directamente de sus servidores de aplicaciones. Sin embargo, diría eso. Yo lo escribi.

  • Con Asset_Sync y S3 puede precompilar activos, lo que significa que todos los activos están listos para ser atendidos en el host / cdn de activos inmediatamente
  • Solo puedes necesitar el :activos paquete en la aplicación.rb en precompilar, guardando la memoria en la producción
  • Sus servidores de aplicaciones nunca se presionan para las solicitudes de activos. Puede pasar un tiempo de cálculo costoso, ya sabes. Informática.
  • Las mejores prácticas de caché HTTP están configurados de forma predeterminada
  • Puede habilitar la compresión automática de GZIP con una configuración adicional

Por razones que nunca entenderé, no puedo marcar la respuesta anterior como útil, pero tuve el mismo problema con mis activos en Amazon S3 y mi aplicación se implementó en Heroku.

Simplemente verificar "Public/Assets/Manifest.yml" resolvió los errores de "activo no precompilado" cuando estaba en Heroku.

Ajustar mi archivo de producción. RB para incluir 1) config.assets.precompile += %w( *.js *.css ) 2) config.serve_static_assets = true y 3) config.assets.compile = true hizo el truco para mí.

Antes de incluir estos ... mi entorno de desarrollo tenía todos los activos JS / CSS cargando, pero la producción en Heroku los extrañaba.

Ver también: Falta el activo JavaScript de Rails después de precompilar

Déjame darte una gran pista, hazlo de la manera oficial de Heroku:

http://devcenter.heroku.com/articles/cdn-set-host-rails31

https://github.com/rumblelabs/asset_sync

Lo hará todo por ti, Heroku precompilará y luego la gema Asset_Sync lo copiará a tu directorio S3 y los URL_Helpers solo funcionarán. Supongo que la desventaja es que tienes que ejecutar la fase de precompilación (pero solo copia cuando cambia las cosas) y tienes que almacenar tus activos en tu repositorio GIT.

Creo que lo que está sucediendo es que está buscando el Manifest.yml saber si los activos han sido compilados. Dado que este archivo está en público/activo de forma predeterminada y no está revisando eso en su repositorio, supone que los activos no se hayan compilado. Intente cambiar la ubicación del archivo en config/environments/production.rb y ver si eso soluciona el problema

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top