Aggiornamento da 3.0.0.beta16 a 3.1.0.beta2

Ho provato a fare un backup e il backup è fallito.

Ho provato a fare un aggiornamento.

All’inizio, la schermata di aggiornamento aveva tutto disabilitato. Ho riavviato e poi sono stato in grado di selezionare l’aggiornamento di docker_manager. Questo è fallito con:

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

Quindi, ho deciso di accedere al server tramite ssh e ho provato una ricostruzione e questo è quello che ho ottenuto:

root@Discourse-1:/var/discourse# ./launcher rebuild app
x86_64 arch detected.
WARNING: containers/app.yml file is world-readable. You can secure this file by running: chmod o-rwx containers/app.yml
Ensuring launcher is up to date
Fetching origin
Launcher is up-to-date
............
Downloading MaxMindDB...
Compressing Javascript and Generating Source Maps

I, [2023-03-10T03:08:58.958320 #1]  INFO -- : Terminating async processes
I, [2023-03-10T03:08:58.958649 #1]  INFO -- : Sending INT to 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 -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 103
103:signal-handler (1678417738) Received SIGTERM scheduling shutdown...
2023-03-10 03:08:58.959 UTC [42] LOG:  received fast shutdown request
2023-03-10 03:08:58.966 UTC [42] LOG:  aborting any active transactions
2023-03-10 03:08:58.969 UTC [42] LOG:  background worker "logical replication launcher" (PID 51) exited with exit code 1
2023-03-10 03:08:58.971 UTC [46] LOG:  shutting down
103:M 10 Mar 2023 03:08:59.047 # User requested shutdown...
103:M 10 Mar 2023 03:08:59.047 * Saving the final RDB snapshot before exiting.
2023-03-10 03:08:59.060 UTC [42] LOG:  database system is shut down
103:M 10 Mar 2023 03:08:59.073 * DB saved on disk
103:M 10 Mar 2023 03:08:59.073 # Redis is now ready to exit, bye bye...


FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake themes:update assets:precompile' failed with return #<Process::Status: pid 1004 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"assets_precompile", "cmd"=>["su discourse -c 'bundle exec rake themes:update assets:precompile'"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
e956a73644feb880e4b524bcbd4fa3c626fcfcc4edb3752f72e523194f663b4e
root@Discourse-1:/var/discourse# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
root@Discourse-1:/var/discourse# 

Hai dei plugin nel tuo file app.yml?
Quando mi succede questo tipo di cose, di solito è un plugin corrotto che deve essere commentato prima che la ricostruzione funzioni.

Quanta memoria hai? Prova a riavviare il tuo computer e a ricostruire di nuovo.

Cosa dice free?

Personalmente, se un backup fallisse, non proverei un aggiornamento. Un backup - inclusa una copia scaricata - è per me un prerequisito. Questo potrebbe non essere un commento utile in questo momento, ma penso che debba essere detto.

Nel tuo altro post fornisci qualche informazione in più sul rake abortito:

Non è questo il problema. Sembra che non ci sia una chiave per scaricare il database max mind. Il problema è sopra.

Se il problema è un fallimento nello spawn, allora non ci preoccupiamo solo dell’utilizzo di RAM e swap, ma anche della configurazione del kernel. Se questo appare nei log

# WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

allora vale la pena fare come consigliato. Vedi anche

La mia installazione di Discourse è molto generica. Dopo un riavvio ho ottenuto un backup pulito. Quindi, alla fine ho deciso di fare un’installazione da zero. L’installazione è fallita con gli stessi errori che ho postato sopra. Ho eseguito Discourse con 6 GB di memoria in un container LXD negli ultimi quattro anni senza problemi. L’utilizzo della memoria è costante a 1,9 GB. Durante un aggiornamento, la memoria raggiunge il picco di 5,1 GB. Il mio backup del database contiene solo 30 GB di dati, quindi la mia installazione è piccola rispetto ad altre. La mia configurazione è in esecuzione su Ubuntu 22.04. Dovrei usare un’altra distro?

Ho forse 40 utenti e 150 post. Il sistema utilizza 1,8 GB di memoria e gli ho assegnato 6 GB di memoria. Quanta memoria è necessaria per far funzionare una ricostruzione? Questo è sempre stato sufficiente in passato.

Non uso plugin.

Puoi condividere il tuo file app.yml? Temo che tu abbia una chiave API non valida per MaxMind.

Ecco il mio app.yml.

## questo è il modello del contenitore Docker Discourse tutto in uno e autonomo
##
## Dopo aver apportato modifiche a questo file, DEVI ricostruire
## /var/discourse/launcher rebuild app
##
## FAI MOLTA ATTENZIONE QUANDO MODIFICHI!
## I FILE YAML SONO ESTREMAMENTE SENSIBILI A ERRORI DI SPAZIATURA O ALLINEAMENTO!
## visita http://www.yamllint.com/ per convalidare questo file secondo necessità

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Decommenta queste due righe se desideri aggiungere Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

## quali porte TCP/IP deve esporre questo contenitore?
## Se desideri che Discourse condivida una porta con un altro webserver come Apache o nginx,
## vedi https://meta.discourse.org/t/17247 per i dettagli
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Imposta db_shared_buffers al massimo del 25% della memoria totale.
  ## verrà impostato automaticamente da bootstrap in base alla RAM rilevata, oppure puoi sovrascriverlo
  db_shared_buffers: "4096MB"

  ## può migliorare le prestazioni di ordinamento, ma aumenta l'utilizzo della memoria per connessione
  #db_work_mem: "40MB"

  ## Quale revisione Git deve utilizzare questo contenitore? (default: 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

  ## Quante richieste web concorrenti sono supportate? Dipende dalla memoria e dai core della CPU.
  ## verrà impostato automaticamente da bootstrap in base alle CPU rilevate, oppure puoi sovrascriverlo
  UNICORN_WORKERS: 8

  ## TODO: Il nome del dominio a cui risponderà questa istanza di Discourse
  ## Obbligatorio. Discourse non funzionerà con un semplice numero IP.
  DISCOURSE_HOSTNAME: discussion.scottibyte.com

  ## Decommenta se desideri che il contenitore venga avviato con lo stesso
  ## hostname (-h option) specificato sopra (default "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Elenco di email separate da virgole che diventeranno amministratori e sviluppatori
  ## alla prima registrazione esempio 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'aaaaaa@gmail.com'

  ## TODO: Il server di posta SMTP utilizzato per convalidare i nuovi account e inviare notifiche
  # L'INDIRIZZO SMTP, il nome utente e la password sono obbligatori
  # ATTENZIONE il carattere '#' nella password SMTP può causare problemi!
  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           # (opzionale, default true)
  DISCOURSE_SMTP_DOMAIN: discussion.scottibyte.com
  DISCOURSE_NOTIFICATION_EMAIL: noreply@scottibyte.com

  ## Se hai aggiunto il template Lets Encrypt, decommenta qui sotto per ottenere un certificato SSL gratuito
  LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

  ## L'indirizzo CDN http o https per questa istanza di Discourse (configurato per il pull)
  ## vedi https://meta.discourse.org/t/14857 per i dettagli
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
  
  ## La chiave dell'indirizzo IP di geolocalizzazione Maxmind per la ricerca dell'indirizzo IP
  ## vedi https://meta.discourse.org/t/-/137387/23 per i dettagli
  DISCOURSE_MAXMIND_LICENSE_KEY: aaaaaaaa

## Il contenitore Docker è stateless; tutti i dati sono memorizzati in /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## I plugin vanno qui
## vedi https://meta.discourse.org/t/19157 per i dettagli
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Qualsiasi comando personalizzato da eseguire dopo la compilazione
run:
  - exec: echo "Inizio dei comandi personalizzati"
  ## Se desideri impostare l'indirizzo email 'Da' per la tua prima registrazione, decommenta e modifica:
  ## Dopo aver ricevuto la prima email di registrazione, ri-commenta la riga. Deve essere eseguita solo una volta.
  # - exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "Fine dei comandi personalizzati"

Quando ho fatto una nuova build, ho provato una nuova chiave Maxmind e ho ottenuto lo stesso errore.

Elimina o commenta la riga con DISCOURSE_MAXMIND_LICENSE_KEY e ricompila.

E se aiuta. Tutto funziona bene ora. Gli aggiornamenti sono ciò che si rompe.

Ho commentato la chiave Maxmind nello YAML. La ricompilazione è in corso. A proposito, le notifiche via email hanno sempre funzionato bene. Ultimamente l’email per il link di download del backup non funziona più. Vado semplicemente nella cartella e scarico il backup tramite sftp e questo funziona e il log di backup si completa con successo. Quindi, qual è secondo te il problema con la chiave Maxmind?

@Falco A quanto pare la chiave Maxmind era il colpevole.


Come puoi vedere, la ricostruzione ha funzionato e il forum è all’ultima build. Eseguire un nuovo backup ha funzionato dall’interfaccia grafica, così come la notifica di backup e persino il link per il download del backup. Tutto funziona bene.
Grazie, sei il maestro! Ottimi commenti e meraviglioso aiuto, signore.

Quindi, anche con una nuova chiave Maxmind, non ho avuto fortuna. Qualche consiglio al riguardo?

Quindi una chiave non valida interromperà la build ma una chiave nulla no?

Idealmente nessuno dei due, è solo necessaria la conferma di cosa sia esattamente rotto con i passaggi di riproduzione corretti in modo da poter presentare un bug e assegnare un ingegnere per risolverlo.

Tutto quello che ho fatto è stato commentare la chiave e la ricompilazione ha funzionato perfettamente. Con una chiave valida (e anche una nuova) la compilazione fallisce con i log che ho fornito.