No se puede configurar los activos a través de la tubería en los rieles de producción locales 3.1.3 servidor
-
29-10-2019 - |
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 = true
En 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