rails attribute javascript ruby-on-rails ruby asset-pipeline development-environment

javascript - attribute - Ruby On Rails 3.1-canalización de activos-activos rendidos dos veces



javascript rails (4)

Es posible que desee mirar

https://stackoverflow.com/a/7854902/686460

"Agregar config.serve_static_assets = false a development.rb evitará la carga de archivos desde / public / asset"

Creo que es una solución mejor que la que sugieres aquí.

Gran actualización :

Cuando finalmente encontré la solución real, también descubrí el problema real. Cuando escribí aquí mucha información inútil, considerando el problema real, estoy haciendo una gran actualización de la pregunta para que otras personas puedan encontrar fácilmente lo que está pasando y puedan ver la solución.

El problema : es debido a la cartera de activos de Rails 3.1

En realidad ... es fácil: los activos se representaron dos veces en el entorno de desarrollo. Hacer muchas investigaciones me mostró que mi servidor Rails 3.1 estaba procesando los activos tanto de las carpetas "aplicación / activos" como "pública / activos". Entonces, tuve todos los archivos .js y .css duplicados, lo que rompía todas mis animaciones de javascript (sí ... vincular dos veces el mismo evento y el controlador al mismo elemento no es lo que quieres ... normalmente).

Y si el problema aparecía de repente, era porque tenía que ejecutar "activos de rake: precompilación" para implementar mi aplicación. Desde entonces, cuando mi aplicación se estaba ejecutando en desarrollo, el servidor representaba los activos precompilados estáticos y los activos precompilados dinámicos.

La solución (ahora hay una mejor unas pocas líneas más abajo), pero aún puedes leerla

Primero: solo tuve que eliminar todos los recursos precompilados de mi carpeta pública.

Una mejor: agregue config.serve_static_assets = false a development.rb, lo que evitará que se carguen archivos desde / public / asset. Además, no olvide restablecer la memoria caché de su navegador.

[Edición: 20 de julio de 2012]

Avanzado: recientemente tuve un nuevo problema debido a esos activos estáticos. Usted sabe, cuando usa un clip para papel o alguna otra gema y agregan sus imágenes en su carpeta pública en alguna subcarpeta del sistema porque es mejor si desea implementar su aplicación usando capistrano. Bueno, eso es genial pero! A medida que agregamos config.serve_static_assets = false, esas imágenes no se representan en el desarrollo y eso es malo si quieres hacer un poco de CSS en ellas. ¡Asi que! ¿Qué hacer entonces?

Bueno, de hecho, tendrá que activar los activos estáticos en el desarrollo, así:

# Expands the lines which load the assets config.assets.debug = true config.serve_static_assets = true

Luego, para evitar que los rieles representen sus otros activos dos veces (los precompilados), simplemente ejecute este comando:

rake assets:clean

Es lo opuesto a los activos de rake: precompile y limpiará su carpeta pública / de activos para que Rails no rinda sus activos dos veces. Por supuesto, aún tendrá que limpiar el caché de su navegador y limpiar sus activos cada vez que los precompile.

[Editar: 18 de noviembre de 2013] - De @idejuan responda

Otra solución:

Puedes añadir esta línea:

config.assets.prefix = ''/dev/assets''

Para development.rb, donde el prefijo puede ser lo que quieras. ¡Los scripts ya no se cargarán dos veces, y se leerán las imágenes en / public / system! Pero tenga cuidado ya que cambia la ruta de acceso a sus activos "estáticos" ... si necesita activos de una gema, es posible que no se carguen correctamente en el desarrollo ...

[Fin de edición]

La pregunta restante con respuesta!

Bueno, ¿por qué mi aplicación de desarrollo representaba activos precompilados estáticos?

De hecho, si precompila localmente sus activos, Rails renderiza los activos desde la carpeta pública Y desde la carpeta de activos en el entorno de desarrollo y prueba de forma predeterminada. Normalmente, los activos de la carpeta pública deberían sobrescribirlos de la carpeta de activos, pero no es el caso e incluso si lo hace, perderíamos los beneficios del "debug_mode" ya que tendríamos que compilar los activos cada vez. Entonces ... Los activos se procesan dos veces cuando se compilan localmente en el entorno de desarrollo y prueba.

Por lo tanto, al agregar "config.serve_static_assets = false" a su archivo development.rb, de alguna manera sobrescribe la línea predeterminada que le dice a Rails que busque activos en su carpeta pública. Espero que algún día hagan algo más limpio sobre los activos precompilados localmente.

Gracias a los que me ayudaron en mis investigaciones :).

Kulgar.


No puedo ver por qué una actualización de Ubuntu tendría algo que ver con tu JavaScript. ¿Estás usando JavaScript estático? JavaScript dinámico? CoffeeScript? Si es uno de los dos últimos, supongo que es posible que la actualización haya roto una de las herramientas que están procesando su JS ...

Algunas cosas para probar:

  • Ver la fuente de JavaScript en su navegador. Asegúrese de que el mismo código fuente llegue a su navegador.
  • Intente ejecutar la aplicación Rails en un sistema diferente (quizás instale una segunda VM con una versión diferente de Ubuntu y vea si puede replicar el problema).
  • Asegúrese de que la misma versión exacta del código de la aplicación esté en ambos lugares.

También le sugiero que ejecute el servidor de rieles pasándolo a un entorno diferente. Esto podría estar relacionado con la configuración del entorno que ha configurado para el desarrollo.

rails server -e production

Si el problema desaparece, tiene que ver con sus ajustes de configuración para el "entorno de desarrollo".


Tuve el mismo problema y encontré una solución fácil / hackearlo. Acabo de añadir esta línea:

config.assets.prefix = ''/dev/assets''

to development.rb, donde el prefijo puede ser lo que quieras, puse / dev / asset para evitar más confusión.

Los scripts ya no se cargan dos veces, y puedo usar las imágenes que tengo en / public / system que no se pudieron leer cuando probé la solución de config.serve_static_assets = false

Hasta ahora no he encontrado inconvenientes para esta solución. Espero que te sirva también!