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.

1 Mi Piace

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

1 Mi Piace

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.

3 Mi Piace

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

2 Mi Piace

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

1 Mi Piace

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?

1 Mi Piace

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.

1 Mi Piace

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.

1 Mi Piace

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?

3 Mi Piace

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

2 Mi Piace

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.

2 Mi Piace

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.

1 Mi Piace