Estoy reconstruyendo la imagen en una instancia de Digital Ocean y algo tarda una eternidad:
I, [2024-01-10T09:47:14.854311 #1] INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake themes:update assets:precompile'
Node.js heap_size_limit (492.75) is less than 2048MB. Setting --max-old-space-size=2048.
[WARN] (broccoli-terser-sourcemap) Minifying "assets/admin.js" took: 25461ms (more than 20,000ms)
[WARN] (broccoli-terser-sourcemap) Minifying "assets/plugins/chat.js" took: 47818ms (more than 20,000ms)
Purging temp files
Bundling assets
I, [2024-01-10T10:06:07.644096 #3264] INFO -- : Writing /var/www/discourse/public/assets/break_string-cc617154cd957804f2f6a1f3bc68258c9cdca3d4b9a322bf777d145fed04790e.js
La instancia tiene 1 GB de RAM y por lo demás ejecuta Discourse sin problemas. ¿Estoy haciendo algo mal? ¿Puedo hacer algo para acelerar la reconstrucción? ¡Gracias!
Creo que esto te dejará muy limitado en memoria ahora.
Está llegando al punto en que recomendaría un mínimo de 4 GB para una instancia de Discourse (¡más swap!) (incluso con 2 GB + 2 GB de swap, encuentro que las actualizaciones en línea son dolorosamente lentas).
¡Gracias! Desafortunadamente, eso es aproximadamente cuatro veces el precio por una mejora que probablemente solo sentiría durante las actualizaciones. Además, la guía de instalación en la nube todavía dice:
El valor predeterminado de 1 GB de RAM funciona bien para comunidades pequeñas de Discourse. Recomendamos 2 GB de RAM para comunidades más grandes.
¿Sabemos de dónde proviene la presión de memoria en este paso? ¿Quizás sería posible intercambiar una peor relación de compresión o algo por requisitos de memoria reducidos?
Creo que para mi próxima actualización en mis dos servidores, usaré la flexibilidad del proveedor de alojamiento para migrar a una RAM más grande antes de actualizar, y volver a migrar a mi mínimo actual inmediatamente después. Hay una pequeña cantidad de tiempo de inactividad adicional, pero si la reconstrucción es mucho más rápida, podría ser una victoria general. El gasto adicional debería ser inferior a 1 dólar o quizás incluso solo 1 centavo, por una hora de RAM adicional (en mi caso, de 6 dólares por mes a 12 dólares por mes, cobrado por hora en Digital Ocean a 1 y 2 centavos respectivamente).
Como se señaló en el hilo vinculado, a veces un reinicio es útil en cualquier caso, por lo que es un buen momento para actualizar los paquetes del sistema operativo y reiniciar, para mí.
Espero que esto también cause menos desgaste en mí.
De hecho, podría optar por pasar de 1G a 8G, lo que costará 6 centavos adicionales por hora, para darme la libertad de eliminar temporalmente mi archivo de intercambio y aliviar la escasez de espacio en disco.
Todo alcanza su punto máximo en el momento de la actualización; mientras tanto, la configuración mínima actual todavía parece ser adecuada.
Ciertamente puedo permitirme 6 centavos por ciclo de actualización.
OK, pero todavía in situ. Es una gran opción, pero sí, es un inconveniente adicional… y tiempo de inactividad.
Dado que el tiempo de reconstrucción en una máquina de 1 GB lleva tanto tiempo, bien podrías hacer esto, ¡porque de todos modos estará inactiva durante 30 minutos!
Y claro, si estás preparado para hacer eso, incluso una actualización temporal de una máquina de 16 GB podría salir bien en cuanto a costes
Sospecho que muchos considerarán que su tiempo es más valioso y probablemente deberían empezar a pensar en 4 GB o más de forma permanente.
Ciertamente es parte de un compromiso entre costo y tiempo. Por mi parte, ya me he comprometido a dedicar una hora de cuidado de niños para las actualizaciones, y sé perfectamente cómo hacer este baile de administrador de sistemas, por lo que el tiempo ya está reservado. Prefiero mantener el costo operativo mensual lo más bajo posible, incluso si me lleva algo de tiempo; otros tendrán otros compromisos.
Sin duda, si gastar dinero es fácil, ¡consigue una instancia cómodamente grande!
Solo como referencia, acabo de actualizar mis dos foros, ambos se completaron en menos de una hora, en ambos casos temporalmente aumenté a 8G de RAM y volví a la normalidad. Este paso en particular tomó unos 5 minutos, con (temporalmente) 4 CPUs y 8G de RAM.
I, [2024-01-10T16:07:58.323464 #1] INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake themes:update assets:precompile'
110:M 10 Jan 2024 16:08:52.047 * 100 changes in 300 seconds. Saving...
110:M 10 Jan 2024 16:08:52.048 * Background saving started by pid 3276
3276:C 10 Jan 2024 16:08:52.384 * DB saved on disk
3276:C 10 Jan 2024 16:08:52.386 * Fork CoW for RDB: current 1 MB, peak 1 MB, average 0 MB
110:M 10 Jan 2024 16:08:52.449 * Background saving terminated with success
Purging temp files
Bundling assets
MaxMind IP database updates require a license
Please set DISCOURSE_MAXMIND_LICENSE_KEY to one you generated at https://www.maxmind.com
MaxMind IP database updates require a license
Please set DISCOURSE_MAXMIND_LICENSE_KEY to one you generated at https://www.maxmind.com
I, [2024-01-10T16:12:14.362017 #3300] INFO -- : Writing /var/www/discourse/public/assets/break_string-cc617154cd957804f2f6a1f3bc68258c9cdca3d4b9a322bf777d145fed04790e.js
Aquí vemos que ember (columna 12) está usando 2.5G de RAM (columna 6) y más de una CPU (columna 3)
Probablemente 4G de RAM habrían sido suficientes para mí, pero como se mencionó, todo este proceso solo costó unos pocos céntimos. (Ahora veo que podría haber elegido CPUs más rápidas por un céntimo adicional).
Edición: Tomé una copia de seguridad antes de empezar y otra después de que el trabajo se completó, y estuvieron separadas por 35 minutos. Así que el tiempo de inactividad visto por los usuarios no fue mayor que eso.
Edición: tenga en cuenta que el panel de control de Digital Ocean dice que la operación de redimensionamiento puede llevar hasta 1 minuto por GB de datos en el disco; en mi caso, solo 14G y, como resultó, solo 2 minutos por cada redimensionamiento. Pero si tiene una gran cantidad de datos en la instancia, este baile de redimensionamiento podría llevar más tiempo. (Por otro lado, si tiene una gran cantidad de datos, quizás no esté intentando ejecutarlo con menos de 4G de RAM).
4 GB de RAM todavía no son suficientes en algunos casos. Por ejemplo, tengo un entorno aislado (sandbox) de 8 GB de RAM sin prácticamente tráfico, pero es una configuración multisitio para permitir tener 5 entornos aislados desechables. La reconstrucción de hoy falló debido al Error 137 (OOM) y había probado el truco que @richard sugirió anteriormente. Sin embargo, para evitarme la molestia de hacer esto cada vez, he creado un intercambio (swap) más grande (4 GB) que parece haber permitido que las reconstrucciones ocurran por el momento. Parece que solo estamos actualizando servidores en el último año porque las reconstrucciones de Discourse realmente consumen mucha RAM por alguna razón.
Pensando en esto, el beneficio se limita realmente a reconstrucciones completas: actualmente no puedo usar actualizaciones en línea en una configuración 2+2 … y no creo que vaya a hacer este baile de actualización/reversión solo para actualizar, por ejemplo, un solo plugin …
Personalmente, siento que una actualización permanente a al menos 4 GB es la única manera …
Nota: Realmente no me estoy quejando de tener que adaptarme a los tiempos … ¿pero quizás deberíamos empezar a reflejar la realidad en la documentación y los consejos para los administradores?
Desafortunadamente, esto hace que Discourse sea un poco menos accesible para personas nuevas, especialmente jóvenes
De hecho, estoy de acuerdo con esta idea: mantener la configuración mínima recomendada actual como objetivo y buscar ajustes en el código o cambios anteriores para mantener las cosas bajo control. Es un cambio importante en la oferta si la configuración mínima ahora cuesta el doble. Por eso opiné en otro lugar que los requisitos excesivos de memoria son un error.
De hecho, ese es un error de falta de memoria. Si tienes espacio en disco para añadir swap, será suficiente, aunque el proceso llevará más tiempo que si añadieras RAM. Tu proveedor de hosting podría ofrecer la posibilidad de aumentar la RAM temporalmente y luego revertirla, lo que probablemente te costará un par de reinicios, un poco de tiempo de inactividad y unos pocos céntimos de coste adicional.
Edición: para ser claro, memoria = RAM + swap. La RAM es rápida y el swap es barato.