Tema Embed Assets

Hola a todos,

He revisado varios hilos buscando respuestas y he encontrado muchas (enlazadas a continuación, ¡gracias!). Gracias a ellas, puedo conseguir que las cosas se vean mayormente como quiero. Pero todavía hay una pregunta que no he podido resolver.

Se refiere a los archivos de recursos incrustados, específicamente al archivo embed_HASH.css.

Parece que cuando se compilan estos recursos, no se compilan utilizando la paleta de colores del tema activo. Puede que esto sea intencionado o que sea algo que me he perdido.

Me gustaría tener claridad sobre lo siguiente:

  1. ¿Se compila embed_[digest].css siempre utilizando la paleta predeterminada?
    Si es así, puedo vivir con ello; sé que hay mucho trabajo en curso para mejorar cómo se manejan los temas y las paletas de colores en Discourse.
  2. Si puede compilarse con una paleta personalizada, ¿cómo puedo activar ese comportamiento?
  3. He notado que puede compilarse utilizando las paletas clara u oscura del sistema, por lo que parece plausible que se pueda usar una paleta personalizada, pero no he podido generar de forma predecible un archivo incrustado claro u oscuro.

Para probar esto, eliminé todos los temas y paletas, restablecí todo al tema claro predeterminado y luego ejecuté:

rake assets:precompile
rake assets:precompile:build

…esperando obtener un embed_HASH.css con tema claro. Pero el resultado todavía parecía usar estilos oscuros.

No estoy muy familiarizado con el funcionamiento interno, así que puede que me esté perdiendo algo obvio. Si alguien pudiera compartir lo que se necesita para que embed_HASH.css se compile con una paleta predecible, realmente ayudaría.

¡Gracias de antemano!

Para su información, mi instancia de Discourse se está ejecutando en Docker y está actualizada. He utilizado el script launcher y la plantilla independiente.

Lectura relacionada (solo se permiten 2 enlaces para cuentas nuevas, el tercero es un título buscable):

He encontrado una respuesta parcial a mi propia pregunta y quería compartir la información:

El archivo embed_[digest].css se genera utilizando la paleta de colores seleccionada del tema activo.

El problema, como me he dado cuenta, se debe a un caché de respuesta HTTP muy agresivo.

Lo que todavía espero que alguien pueda responder es:
¿Dónde se almacenan en caché las respuestas HTTP para los archivos de activos en Discourse?

Esto no es solo un caché del lado del navegador, parece ser también del lado del servidor.


Al seguir el registro de producción de Rails, observo que solo las solicitudes con un conjunto de parámetros de consulta nuevo y no visto activan una nueva representación de activos:

$ tail -n 50 shared/standalone/log/rails/production.log -f
Started GET "/stylesheets/embed_afe162195ad0a7185309a19d8c36036d2e53708c.css?__ws=domain.tld&foo=bif" for fd00:aaaa::f1a at 2025-06-27 01:14:38 +0000
Processing by StylesheetsController#show as CSS
  Parameters: {"__ws"=>"domain.tld", "foo"=>"bif", "name"=>"embed_afe162195ad0a7185309a19d8c36036d2e53708c"}
Sent file /var/www/discourse/tmp/stylesheet-cache/embed_afe162195ad0a7185309a19d8c36036d2e53708c.css (0.2ms)
Completed 200 OK in 22ms

Después de eso, cualquier solicitud posterior para la misma URL (incluso con diferentes cadenas de consulta) devuelve la misma respuesta, incluso si el tema subyacente ha cambiado.

Por ejemplo:

  1. https://domain.tld/stylesheets/embed_[digest].css?__ws=domain.tld
  2. https://domain.tld/stylesheets/embed_[digest].css?__ws=domain.tld&foo=bar

Solo veo estilos de tema actualizados la primera vez que se utiliza una consulta única. Todas las solicitudes futuras con los mismos parámetros sirven la versión anterior, incluso después de la recompilación.

El script launcher tiene como valor predeterminado RAILS_ENV=production, y lo he dejado así. Podría intentar cambiar a RAILS_ENV=development para deshabilitar el caché por completo durante el desarrollo, pero idealmente, me gustaría saber:

¿Cómo podemos borrar o deshabilitar el caché a nivel HTTP de las respuestas de activos en producción?

Si alguien tiene información sobre cómo Discourse almacena en caché estas respuestas de activos, o cómo invalidarlas correctamente, sería de gran ayuda.

1 me gusta

¡Vaya :flushed_face: ¡Era Nginx!

Resumen:

rm -rf /var/nginx/cache/*`

¡Solución instantánea!


Opcional: Desactivar el caché de activos de Nginx

Edita este archivo:

/etc/nginx/conf.d/discourse.conf

Alrededor de las líneas 243-246, comenta las directivas de caché:

      # proxy_cache one;
      # proxy_cache_key "$scheme,$host,$request_uri";
      # proxy_cache_valid 200 301 302 7d;
      # proxy_cache_bypass $bypass_cache;

Luego reinicia Nginx:

sv restart nginx

:artist_palette: Si estás cambiando paletas de colores…

Simplemente editar la configuración de color en el tema no regenerará embed_[digest].css. Para forzar a Discourse a generar nuevos archivos de activos, haz esto:

rm tmp/stylesheet-cache/* # o, solo para embed, `rm tmp/stylesheet-cache/embed*`

:thinking: ¿Qué pasa con RAILS_ENV=development?

Podrías pensar que establecer RAILS_ENV: development deshabilitaría el caché, pero:

  • El nginx.sample.conf utilizado por Discourse tiene el caché activado por defecto, independientemente del entorno.
  • Ese caché no está vinculado a RAILS_ENV, por lo que no ayudará con el caché de activos incrustados.

Así que, a menos que planees reconfigurar completamente la capa de Nginx, simplemente borra la caché manualmente o deshabilita esas líneas, y estarás listo. Una vez que estés listo para producción, puedes volver a la configuración anterior.

:turtle: ¿Qué pasa con ./launcher rebuild standalone?

Claro, funciona. Pero si estás modificando temas activamente, probando incrustaciones y ajustando colores… querrás algo más rápido que esperar varios minutos cada vez.

:speech_balloon: ¿Tienes una mejor configuración de desarrollo o soluciones rápidas? ¡Participa!

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.