Pregunta

Este mes, actualicé de Rails 3.0 a Rails 3.1 - Esta semana intenté iniciar el servidor en modo de producción, ¡hoy he llegado a una pared!

No puedo hacer que mi servidor de entorno de producción sirva a mis activos públicos (JavaScript y CSS) a través de la tubería de activos, a no ser que lo puse config.assets.compile = trueEn mi archivo ambiente.rb, que por razones de velocidad obviamente no quiero hacer.

Tengo una gran cantidad de archivos JS y CSS, cada uno de los cuales tiende a utilizar en una o dos páginas diferentes. Esto significa que crear un solo archivo "manifiesto" no se ajusta a mi uso, ya que cada página quiere algo ligeramente diferente. También espero que algunos de los CSS no se sienten bien juntos. Por lo tanto, he seguido el enfoque de "simplemente hacer que funcione", buscando ordenar la gran cantidad de CSS / JS más tarde.

Aquí está el archivo Production.RB:

Implicit::Application.configure do
  ...

  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true

  # I set this to true, as I am testing this locally, just running a local Thin server
  config.serve_static_assets = true

  config.assets.compress = true

  # Setting this to false removes the issue - but is SLOW
  config.assets.compile = true

  config.assets.digest = true

  # This is overkill - but does get EVERYTHING precompiled for now
  config.assets.precompile += %w( *.css *.js )

  config.action_dispatch.x_sendfile_header = nil
  ...
end

Esta es una área bastante nueva para mí, por lo que he pasado gran parte de hoy alternando estos booleanos y detener / comenzar el servidor local delgado / rieles para probarlos. Pero el único valor que ha hecho una diferencia sólida es la bandera de compilación.

Mi archivo Application.rb es bastante estándar y tiene config.assets.enabled = true y config.assets.initialize_on_precompile = false En él, este último de un poste de Heroku (y una suposición, nuevamente).

Tengo un completamente poblado public/assets directorio, creado con el bundle exec rake assets:precompile Comando, que tarda unos 20 minutos en correr en mi vieja computadora portátil (5 años), probablemente algo que ver con ese "atrapado" precompilado regex, aunque con esa línea comentó que aún toma más de 10 minutos (!)

Con la bandera de compilación establecida en true, Puedo ver copias de estos activos creando en mi /tmp/cache Directorio: esta es claramente la aplicación que crea su propia "copia compilada" de los activos.

Con la bandera de compilación establecida en false, Me enfrento al mensaje de error (en los registros, a menos que configure las solicitudes en local, entonces lo veo en la página de error renderizado) de jquery.reveal isn't precompiled. Sin embargo, cuando voy a http://localhost:3000/assets/jquery.reveal.js El archivo JavaScript se sirve.

La línea de mi diseño de aplicación que causa esto es:

<%= javascript_include_tag "application", "jquery.reveal" %>

He intentado cambiar esa jQuery.Reveal a jquery.reveal.js sin cambios. Eliminarlo corrige la página de índice, excepto que la funcionalidad jQuery.reveal se ha ido, por supuesto. Claramente, la aplicación.js se está sirviendo correctamente. No puedo entender por qué jQuery.Reveal no es, ya que puedo ver los archivos precompilados en el directorio público/de activos.

No hay solución correcta

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