Activos de Discourse faltantes

Hola,

He instalado Discourse en un servidor Fedora 31 siguiendo la guía de instalación recomendada, pero utilicé podman en lugar de Docker para ejecutar el contenedor. Todo funcionó perfectamente esta mañana cuando lo configuré inicialmente; sin embargo, tuve problemas para que el HTTP simple funcionara con Nginx en el host y tuve que usar los certificados SSL en ambas instancias de Nginx. Configuré Discourse y todo quedó bien.

Más tarde decidí reconstruir Discourse con SSL desactivado y hacerlo desde una cuenta de usuario no root. El HTTP simple al host funcionó correctamente, pero obtuve una página en blanco (el título estaba bien y el favicon también).

Verifiqué el directorio dentro del contenedor:

root@xena-app:/var/www/discourse# ls public/assets -al
total 15640
drwxr-xr-x. 2 discourse discourse      10 Jan 11 13:54 .
drwxr-xr-x. 3 discourse discourse      29 Jan 11 13:57 ..
-rw-r--r--. 1 discourse discourse     595 Jan 11 13:49 _activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js
-rw-r--r--. 1 discourse discourse     250 Jan 11 13:54 activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js.br
-rw-r--r--. 1 discourse discourse     420 Jan 11 13:54 activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js.gz
-rw-r--r--. 1 discourse discourse     695 Jan 11 13:54 activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js.map
-rw-r--r--. 1 discourse discourse  990519 Jan 11 13:50 _admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js
-rw-r--r--. 1 discourse discourse   83903 Jan 11 13:54 admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.br
-rw-r--r--. 1 discourse discourse  106465 Jan 11 13:54 admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.gz
-rw-r--r--. 1 discourse discourse  366446 Jan 11 13:54 admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.map
drwxr-xr-x. 2 discourse discourse    4096 Jan 11 13:54 admin-login
...

Los archivos solicitados realmente no existen; incluso Nginx lo indica:

2020/01/11 13:59:49 [error] 60#60: *20 open() "/var/www/discourse/public/assets/plugins/poll-57c9059384e3daeaee3d974c985d85a2b8462bb2629eb0b1834451056d1e1459.js" failed (2: No such file or directory), client: 10.0.2.2, server: _, request: "GET /assets/plugins/poll-57c9059384e3daeaee3d974c985d85a2b8462bb2629eb0b1834451056d1e1459.js HTTP/1.0", host: "idlerpg.xyz", referrer: "https://idlerpg.xyz/"

Pensé que esto podría ser un problema con mi instalación, ya que estos archivos sí estaban presentes en la instalación anterior esta mañana, ejecutándose como root en el host. He borrado la carpeta compartida y he reconstruido como usuario no root, obteniendo los mismos resultados una y otra vez. Luego intenté de nuevo, esta vez como root con la misma configuración que esta mañana, y obtuve los mismos problemas.

Una instalación como usuario no root siempre muestra la página “¡Felicidades, has instalado Discourse!”, pero después de completar la instalación, obtengo una página en blanco porque faltan los archivos de activos.

¿Hay alguna manera de solucionar la falta de estos archivos de activos?

Por si alguien se pregunta si realmente funcionó esta mañana, aquí hay una captura de pantalla de mi móvil


Discourse aún no me permite usar dos imágenes en una sola publicación :slight_smile:

He cambiado esto a un error. No logro obtener una versión con todos los activos al ejecutar tests-passed.
Intenté entrar al contenedor y ejecutar rake assets:precompile, pero los mismos activos siguen faltando.

Parece que tras un montón de reconstrucciones, ahora funciona como por arte de magia. Qué raro.

¡Hola Adriany, bienvenido al foro!

Por lo que yo sé, Docker es un requisito, no una opción. ¿Dónde viste esta nueva guía de instalación?

Acabo de reemplazar Docker con Podman, funciona bien. Su sintaxis de línea de comandos es compatible.

Vale, tras algunas pruebas, puedo confirmar que siempre muestra una página en blanco después de cada reconstrucción. Si ejecuto RAILS_ENV=production bin/rake assets:precompile, siempre funciona después. No tengo idea de por qué, ¿no debería compilarlos en una reconstrucción de todos modos?

¿Viste este tema y, en particular, esta publicación sobre la incompatibilidad de Podman con Docker?

Bueno, de hecho funciona. Podman no debería influir en qué archivos serán el resultado de la compilación inicial de activos.

¿Ves algún rastreo de pila en la salida durante la fase de compilación de activos de la reconstrucción?

Estamos aquí porque algo no funciona. Lo que debería pasar y lo que sucede son estados diferentes.

Estás afirmando con confianza que Podman no está implicado. Sería bueno probarlo para eliminarlo claramente como factor. Por lo que sé, no has completado el método de instalación oficial con Docker para ver si eso elimina el problema.

Sí, lo hago.

I, [2020-01-12T20:58:31.800117 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake assets:precompile'
Limpiando archivos temporales
Empaquetando activos
I, [2020-01-12T20:58:38.208107 #758]  INFO -- : Escribiendo /var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js
I, [2020-01-12T20:59:02.428630 #758]  INFO -- : Escribiendo /var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js
I, [2020-01-12T20:59:02.447192 #758]  INFO -- : Escribiendo /var/www/discourse/public/assets/preload-store-d32dcf974dddcac742f8a7a6aa7fcd686185920b201029d0ecb2b85527ef9034.js
I, [2020-01-12T20:59:02.707559 #758]  INFO -- : Escribiendo /var/www/discourse/public/assets/browser-update-1741a2ed67a367faeb0a582af064457e8b1b1354e52e6efcf8bf26301166dec8.js
I, [2020-01-12T20:59:02.753632 #758]  INFO -- : Escribiendo /var/www/discourse/public/assets/break_string-cc617154cd957804f2f6a1f3bc68258c9cdca3d4b9a322bf777d145fed04790e.js
I, [2020-01-12T20:59:04.073148 #758]  INFO -- : Escribiendo /var/www/discourse/public/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js
I, [2020-01-12T20:59:06.303026 #758]  INFO -- : Escribiendo /var/www/discourse/public/assets/pretty-text-bundle-fa6ea00e2000bf2f9ed3f069be9253477fed5e7290b5d109a3e2d9498ac70e81.js
... [recortado]
108798.339928812 Comprimiendo: vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js
uglifyjs '/var/www/discourse/public/assets/_vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js' -m -c -o '/var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js' --source-map "root='/assets',url='/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js.map'" --output '/var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js'
gzip -f -c -9 /var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js > /var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js.gz

brotli -f --quality=11 /var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js --output=/var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js.br


Compresión de vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js completada: 3.33 seg

108801.669283898 Comprimiendo: admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js
uglifyjs '/var/www/discourse/public/assets/_admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js' -m -c -o '/var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js' --source-map "root='/assets',url='/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.map'" --output '/var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js'
gzip -f -c -9 /var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js > /var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.gz
[...]

Sí los compila, pero siempre tengo que volver a ejecutarlo después de la compilación para que aparezcan los archivos que faltan

Interesante, así que los archivos se crean correctamente, pero la persistencia falla.

Revisa cómo funciona el volumen de Podman y qué controlador lo respalda. En el mundo de Docker hemos tenido muchos problemas extraños con los controladores de almacenamiento a lo largo de los años, lo que nos llevó incluso a mantener una lista de controladores “aprobados” en nuestro script de lanzamiento.

Para ser claro, mis experimentos con Podman realmente probaban el launcher, no Discourse. Al menos cuando lo probé, dependía de detalles de salida de Docker que Podman no intenta emular.

@Adriany, supongo que estás usando el controlador de almacenamiento predeterminado, que es el mismo recomendado para Discourse, el cual en Docker es “overlay2” — pero no sé si ese sea el caso.

Estoy usando overlayfs, que es el equivalente a overlay2.
Curiosamente, se compiló correctamente sin activos faltantes tras algunos builds adicionales que tenían activos faltantes cuando intenté agregar plugins. Cuando volví a compilar sin plugins, funcionó perfectamente. ¿Qué pasa?

Edición: Funcionó para mí y ahora los activos están almacenados en caché aquí. Durante la ejecución, dejó de funcionar para otros usuarios.

Edición 2: Otro build lo rompió de nuevo, igual que antes, y la solución fue volver a compilar como antes.

Si los archivos se generan correctamente mediante nuestro pipeline de activos y el sistema operativo indica que no hay errores, pero desaparecen tras la reconstrucción (lo que efectivamente reinicia el contenedor), apostaría (de nuevo) al controlador de almacenamiento de Podman.

A menos que alguien pueda reproducir este mismo comportamiento usando Docker (y habría varios temas si fuera así), me temo que necesitas abrir un ticket en el proyecto de Podman sobre esto.

Hola,

He realizado más investigaciones y parece que me equivoqué en mis suposiciones sobre dónde se almacenan los archivos o simplemente no supe encontrarlos.

Los archivos todos devuelven un 404, pero toma esto como ejemplo:

root@idlerpg:/var/www/discourse# find . -type f -name "*discourse-solved*"
./tmp/stylesheet-cache/discourse-solved_9_cb2984706f4402e95fd787160a5588ed0972ccc3.css
./tmp/stylesheet-cache/discourse-solved_9_cb2984706f4402e95fd787160a5588ed0972ccc3.css.map
./public/assets/plugins/_discourse-solved-5b7312e4207059eb2654a46e804b4c899cfc1e2a362d0d60e580943f9eb9d419.js
./public/assets/plugins/discourse-solved-5b7312e4207059eb2654a46e804b4c899cfc1e2a362d0d60e580943f9eb9d419.js.gz
./public/assets/plugins/discourse-solved-5b7312e4207059eb2654a46e804b4c899cfc1e2a362d0d60e580943f9eb9d419.js.br
./public/assets/plugins/discourse-solved-5b7312e4207059eb2654a46e804b4c899cfc1e2a362d0d60e580943f9eb9d419.js.map
./app/assets/javascripts/plugins/discourse-solved.js.erb
./plugins/discourse-solved/test/javascripts/acceptance/discourse-solved-test.js.es6

Están ahí, así que supongo que esto es un problema de Discourse y no de Podman; simplemente no logré buscar los archivos correctamente.

Pensé que podría ser un problema en Cloudflare, pero cuando hago un curl rápido en localhost en el servidor, también obtengo un 404.

¿Puedes darnos una reproducción de esto ocurriendo en Docker?