proyectos ejemplos ruby-on-rails ruby-on-rails-3.1 asset-pipeline

ruby-on-rails - ejemplos - django



¿Cómo evitar que los activos precompilados se sirvan en modo de desarrollo? (4)

Prefiero no concatenar archivos JavaScript en modo de desarrollo, sino servirlos como archivos individuales. Entonces configuré:

development.rb:

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

En mi directorio / app / assets / javascript tengo:

  • reviews.js
  • críticas /
    • foo.js
    • bar.js

reviews.js:

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

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

Ahora, cuando precompilo mis activos para producción utilizando rake assets:precompile los tres archivos JavaScript se concatenan en reviews.js . Todo esto está bien para la producción, pero ahora, en modo de desarrollo , las reviews.js concatenadas se sirven además de los dos archivos individuales.

Por supuesto, esto conduce a todo tipo de errores desagradables cuando se desarrolla porque ahora, el contenido de foo.js y bar.js se sirve dos veces, una de ellas en una versión potencialmente más antigua en reviews.js .

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


En el conjunto config/environments/development.rb :

config.assets.prefix = "/assets_dev"

de modo que en el modo de desarrollo , Rails buscará allí (pero no encontrará nada, ya que no compilará activos en desarrollo (esto es lo que está intentando hacer, no compilar activos)).

Cuando se precompila para producción , use

RAILS_ENV=production rake assets:precompile

por lo que se compila en la carpeta de activos predeterminados, public/assets .


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

Observé que la nueva versión de la canalización de activos hace esto cuando ejecuta rake assets:precompile hace rake assets:precompile:all


Parece que estás 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 forma de detener esto es eliminar los archivos compilados.

Normalmente no necesita 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 usar 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úrate de forzar la actualización de tu navegador (control + F5) o puedes encontrar los viejos recursos usados ​​en el caché del navegador!


en el conjunto config/environments/development.rb :

config.serve_static_assets = false

y no se servirán archivos de /public