Actualización de 3.0.0.beta16 a 3.1.0.beta2

Intenté hacer una copia de seguridad y falló.

Intenté hacer una actualización.

Al principio, la pantalla de actualización tenía todo deshabilitado. Reinicié y luego pude seleccionar la actualización de docker_manager. Eso falló con:

rake aborted!
NoMethodError: undefined method `path' for nil:NilClass

Así que, opté por conectarme por SSH al servidor e intenté una reconstrucción y esto es lo que obtuve:

root@Discourse-1:/var/discourse# ./launcher rebuild app
Se detectó la arquitectura x86_64.
ADVERTENCIA: El archivo containers/app.yml es legible por todos. Puedes proteger este archivo ejecutando: chmod o-rwx containers/app.yml
Asegurando que el lanzador esté actualizado
Obteniendo origen
El lanzador está actualizado
............
Descargando MaxMindDB...
Comprimiendo Javascript y Generando Mapas de Origen

I, [2023-03-10T03:08:58.958320 #1]  INFO -- : Terminando procesos asíncronos
I, [2023-03-10T03:08:58.958649 #1]  INFO -- : Enviando INT a HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 42
I, [2023-03-10T03:08:58.958745 #1]  INFO -- : Enviando TERM a exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 103
103:signal-handler (1678417738) Se recibió SIGterm programando el apagado...
2023-03-10 03:08:58.959 UTC [42] LOG:  se recibió solicitud de apagado rápido
2023-03-10 03:08:58.966 UTC [42] LOG:  anulando todas las transacciones activas
2023-03-10 03:08:58.969 UTC [42] LOG:  el proceso de fondo "lanzador de replicación lógica" (PID 51) salió con código de salida 1
2023-03-10 03:08:58.971 UTC [46] LOG:  apagando
103:M 10 Mar 2023 03:08:59.047 # Solicitud de apagado del usuario...
103:M 10 Mar 2023 03:08:59.047 * Guardando la instantánea final de RDB antes de salir.
2023-03-10 03:08:59.060 UTC [42] LOG:  el sistema de bases de datos está apagado
103:M 10 Mar 2023 03:08:59.073 * DB guardado en disco
103:M 10 Mar 2023 03:08:59.073 # Redis está listo para salir, adiós...


FALLIDO
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake themes:update assets:precompile' falló con retorno #<Process::Status: pid 1004 exit 1>
Ubicación del fallo: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec falló con los parámetros {"cd"=>"$home", "hook"=>"assets_precompile", "cmd"=>["su discourse -c 'bundle exec rake themes:update assets:precompile'"]}
falló el arranque con el código de salida 1
** FALLO AL ARRANQUE ** por favor desplázate hacia arriba y busca mensajes de error anteriores, puede haber más de uno.
./discourse-doctor puede ayudar a diagnosticar el problema.
e956a73644feb880e4b524bcbd4fa3c626fcfcc4edb3752f72e523194f663b4e
root@Discourse-1:/var/discourse# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
root@Discourse-1:/var/discourse# 

¿Tienes algún plugin en tu app.yml?
Cuando me pasa este tipo de cosas, suele ser un plugin roto que tiene que ser comentado antes de que la reconstrucción funcione.

1 me gusta

¿Cuánta memoria tienes? Intenta reiniciar tu máquina y volver a compilar.

1 me gusta

¿Qué te dice free?

Personalmente, si una copia de seguridad fallara, no intentaría una actualización. Una copia de seguridad —incluida tener una copia descargada— es un requisito previo para mí. Puede que este no sea un comentario útil en este momento, pero creo que hay que decirlo.

3 Me gusta

En tu otra publicación das un poco más de información sobre el rake aborted:

2 Me gusta

Ese no es el problema. Parece que no hay una clave para descargar la base de datos max mind. El problema está arriba.

1 me gusta

Si el problema es un fallo al iniciar, entonces no solo nos preocupamos por el uso de RAM y swap, sino que nos preocupamos por la configuración del kernel. Si esto aparece en los registros

# ADVERTENCIA: overcommit_memory está configurado en 0. El guardado en segundo plano puede fallar en condiciones de poca memoria. Para solucionar este problema, agregue 'vm.overcommit_memory = 1' a /etc/sysctl.conf y luego reinicie o ejecute el comando 'sysctl vm.overcommit_memory=1' para que esto tenga efecto.

entonces vale la pena hacerlo como se recomienda. Ver también

Mi instalación de Discourse es muy genérica. Después de un reinicio, obtuve una copia de seguridad limpia. Así que, en última instancia, decidí hacer una instalación desde cero. La instalación falló con los mismos errores que publiqué anteriormente. He estado ejecutando Discourse con 6 GB de memoria en un contenedor LXD durante los últimos cuatro años sin problemas. La utilización de la memoria se mantiene estable en 1,9 GB. Durante una actualización, la memoria alcanza un pico de 5,1 GB. Mi copia de seguridad de la base de datos es de solo 30 GB de datos, por lo que mi instalación es pequeña en comparación con otras. Mi configuración se ejecuta en Ubuntu 22.04. ¿Debería estar en otra distribución?

1 me gusta

Tengo quizás 40 usuarios y 150 publicaciones. El sistema utiliza 1,8 GB de memoria y le he asignado 6 GB de memoria. ¿Cuánta memoria se requiere para que funcione una reconstrucción? Eso siempre ha sido suficiente en el pasado.

No uso ningún plugin.

¿Puedes compartir tu archivo app.yml? Me temo que tienes una clave API no válida para MaxMind.

1 me gusta

Aquí está mi app.yml.

## esta es la plantilla de contenedor Docker de Discourse todo en uno y autónoma
##
## Después de realizar cambios en este archivo, DEBE reconstruir
## /var/discourse/launcher rebuild app
##
## ¡TENGA MUCHO CUIDADO AL EDITAR!
## ¡LOS ARCHIVOS YAML SON EXTREMADAMENTE SENSIBLES A ERRORES DE ESPACIO EN BLANCO O ALINEACIÓN!
## visite http://www.yamllint.com/ para validar este archivo según sea necesario

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Descomente estas dos líneas si desea agregar Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

## ¿Qué puertos TCP/IP debe exponer este contenedor?
## Si desea que Discourse comparta un puerto con otro servidor web como Apache o nginx,
## consulte https://meta.discourse.org/t/17247 para obtener detalles
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Establezca db_shared_buffers en un máximo del 25% de la memoria total.
  ## se establecerá automáticamente mediante bootstrap según la RAM detectada, o puede anularlo
  db_shared_buffers: "4096MB"

  ## puede mejorar el rendimiento de la clasificación, pero agrega uso de memoria por conexión
  #db_work_mem: "40MB"

  ## ¿Qué revisión de Git debe usar este contenedor? (predeterminado: tests-passed)
  #version: tests-passed

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## ¿Cuántas solicitudes web concurrentes se admiten? Depende de la memoria y los núcleos de CPU.
  ## se establecerá automáticamente mediante bootstrap según las CPU detectadas, o puede anularlo
  UNICORN_WORKERS: 8

  ## TODO: El nombre de dominio al que responderá esta instancia de Discourse
  ## Requerido. Discourse no funcionará con un número IP simple.
  DISCOURSE_HOSTNAME: discussion.scottibyte.com

  ## Descomente si desea que el contenedor se inicie con el mismo
  ## nombre de host (-h opción) que se especifica arriba (predeterminado "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Lista de correos electrónicos separados por comas que se convertirán en administradores y desarrolladores
  ## en el registro inicial, ejemplo 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'aaaaaa@gmail.com'

  ## TODO: El servidor de correo SMTP utilizado para validar nuevas cuentas y enviar notificaciones
  # La DIRECCIÓN SMTP, el nombre de usuario y la contraseña son requeridos
  # ADVERTENCIA: el carácter '#' en la contraseña SMTP puede causar problemas.
  DISCOURSE_SMTP_ADDRESS: smtp.gmail.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: redacted
  DISCOURSE_SMTP_PASSWORD: redacted
  DISCOURSE_SMTP_ENABLE_START_TLS: true           # (opcional, predeterminado true)
  DISCOURSE_SMTP_DOMAIN: discussion.scottibyte.com
  DISCOURSE_NOTIFICATION_EMAIL: noreply@scottibyte.com

  ## Si agregó la plantilla Lets Encrypt, descomente a continuación para obtener un certificado SSL gratuito
  LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

  ## La dirección CDN http o https para esta instancia de Discourse (configurada para extraer)
  ## consulte https://meta.discourse.org/t/14857 para obtener detalles
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
  
  ## La clave de dirección IP de geolocalización Maxmind para la búsqueda de direcciones IP
  ## consulte https://meta.discourse.org/t/-/137387/23 para obtener detalles
  DISCOURSE_MAXMIND_LICENSE_KEY: aaaaaaaa

## El contenedor Docker no tiene estado; todos los datos se almacenan en /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Los plugins van aquí
## consulte https://meta.discourse.org/t/19157 para obtener detalles
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Cualquier comando personalizado para ejecutar después de la construcción
run:
  - exec: echo "Comienzo de comandos personalizados"
  ## Si desea establecer la dirección de correo electrónico 'De' para su primer registro, descomente y cambie:
  ## Después de recibir el primer correo electrónico de registro, vuelva a comentar la línea. Solo necesita ejecutarse una vez.
  # - exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "Fin de comandos personalizados"

Cuando hice una nueva compilación, probé una nueva clave de Maxmind y obtuve el mismo error.

Elimina o comenta la línea con DISCOURSE_MAXMIND_LICENSE_KEY y vuelve a compilar.

1 me gusta

Y, por cierto, si ayuda. Todo funciona bien ahora. Las actualizaciones son lo que está fallando.

Comenté la clave de Maxmind en el YAML. La reconstrucción está en marcha. Por cierto, las notificaciones por correo electrónico siempre han funcionado bien. Últimamente, el correo electrónico para el enlace de descarga de copias de seguridad ya no funciona. Simplemente voy a la carpeta y descargo la copia de seguridad a través de sftp y eso funciona y el registro de copias de seguridad se completa con éxito. Entonces, ¿cuál cree que es el problema con la clave de Maxmind?

@Falco Bueno, aparentemente la clave de Maxmind fue la culpable.


Como puedes ver, la reconstrucción funcionó y el foro está en la última compilación. Realizar una nueva copia de seguridad funcionó desde la GUI, al igual que la notificación de copia de seguridad e incluso el enlace de descarga de copia de seguridad. Todo funciona bien.
¡Gracias, eres el maestro! Grandes comentarios y maravillosa ayuda, señor.

Entonces, incluso con una nueva clave de Maxmind, no tuve suerte. ¿Algún consejo sobre eso?

3 Me gusta

¿Entonces una clave no válida romperá la compilación pero una clave nula no?

2 Me gusta

Idealmente ninguno de los dos, solo necesito confirmación de qué está roto exactamente con los pasos de reproducción adecuados para que podamos registrar un error y asignar un ingeniero para solucionarlo.

2 Me gusta

Todo lo que hice fue comentar la clave y la reconstrucción funcionó perfectamente. Con una clave válida (e incluso una nueva), la compilación falla con los registros que he proporcionado.

1 me gusta