2011-11-04 17 views
48

Prefiero no para concatenar archivos JavaScript en modo de desarrollo, pero sírvalos como archivos individuales. Así que he configurado:¿Cómo se pueden evitar los activos precompilados que se sirven en modo de desarrollo?

development.rb:

config.assets.compress = false 
config.assets.debug = true 
config.assets.compile = true 

En mis/app/activos/javascript directorio que tengo:

  • reviews.js
  • comentarios/
    • foo.js
    • bar.js

reviews.js:

//= require jquery 
//= require jquery_ujs 
//= require_tree ./reviews 

que incluyen el uso de JavaScript <%= javascript_include_tag "reviews" %> en mi diseño. La página generada hace referencia correctamente a los tres scripts individualmente y reviews.js está esencialmente vacío. Hasta aquí todo bien.

Ahora, cuando PRECOMPILE mis activos para la producción utilizando rake assets:precompile los tres archivos JavaScript se concatenan en reviews.js. Esto está bien para la producción, pero ahora, en el modo de desarrollo, el 0 concatenado reviews.js se sirve además en los dos archivos individuales.

Por supuesto, esto conduce a todo tipo de insectos desagradables cuando se desarrollan debido momento, el contenido de foo.js y bar.js se sirve en dos ocasiones, una de ellas en una versión potencialmente mayor en reviews.js.

¿Cómo puedo asegurarme de que Rails no utilice los recursos precompilados en el modo de desarrollo?

Respuesta

52

Parece que está precompilando localmente. Debido a que los archivos existen en la ubicación esperada, están siendo servidos por su servidor de desarrollo, y las solicitudes no van a Sprockets.

La única manera de detener esto es eliminar los archivos compilados.

Normalmente no es necesario compilar localmente. Se espera que en casi todos los casos, la tarea de precompilación se ejecute durante el despliegue de la aplicación. Hay una receta de Capistrano para esto en la página de guía de canalización de activos.

Si necesita tener esos archivos comprometidos localmente con su repositorio, podría utilizar una sucursal para evitar el problema. Reserve su rama principal para el código de producción y cree una segunda rama para el desarrollo. Solo compila y compromete activos en el maestro. Cuando cambies a dev, se habrán ido. Merge dev en master según sea necesario.

Editar: ¡Asegúrese de forzar la actualización de su navegador (control + F5) o puede encontrar los activos antiguos utilizados desde el caché del navegador!

+0

Gracias por el consejo, he borrado los archivos compilados a nivel local y configurado para tener los recopiló en git push a heroku. –

+1

Esa fue la respuesta que necesitaba. Es cierto que no necesito estos activos precompilados a nivel local mientras desarrollo, pero a medida que estoy aprendiendo a configurar el inventario de activos, realmente los necesito para probar mi modo de producción localmente, ¡en lugar de esperar la sorpresa en Heroku! Por ahora cambiaré el nombre del directorio (o los colocaré en una rama git), pero aún así es una pena que sea una cosa más en la que deba pensar, en lugar de una opción de configuración en el entorno de desarrollo para decir "ignorar el público/activos" directorio "que estaba esperando. – Phantomwhale

+1

Es posible que no olvide borrar la caché de su navegador para que el navegador no use la aplicación.js que cargó accidentalmente antes de rm -rf'd public/assets –

1

Intenté esto y funcionó.rake assets:precompile RAILS_ENV=production

he observado que la nueva versión de la tubería activos hace esto cuando se ejecuta rake assets:precompile hace rake assets:precompile:all

80

En config/environments/development.rb conjunto:

config.assets.prefix = "/assets_dev" 

para que en desarrollo rieles modo se verá allí (pero no encontrará nada, ya que no compilará activos en desarrollo (esto es lo que está intentando hacer, no compilar activos).

Cuando precompilar para la producción , utilice

RAILS_ENV=production rake assets:precompile 

por lo que compila en la carpeta por defecto activos, public/assets.

+15

Esta debería ser la respuesta seleccionada. Buen descubrimiento. –

+1

Cabe señalar que este cambio alterará la ruta de "activos /" que utiliza Rails en sus URL, para que pueda obtener imágenes como 'http: //127.0.0.1: 3000/assets_dev/favicon.ico' –

+0

Algunas veces tiene precompilar los activos. Entonces esta es la mejor respuesta. De lo contrario, necesitaría seguir eliminando y regenerando activos. –

15

en config/environments/development.rb conjunto:

config.serve_static_assets = false 

y no hay archivos de /public se servirá

+3

tenga en cuenta que los archivos cargados en la carpeta pública no se servirán, por lo que probablemente sea mejor evitar esto. –

+1

En la última versión esto ha sido cambiado a 'config.serve_static_files' –

Cuestiones relacionadas