Mise à jour de 3.0.0.beta16 à 3.1.0.beta2

J’ai essayé de faire une sauvegarde et la sauvegarde a échoué.

J’ai essayé de faire une mise à niveau.

Au début, l’écran de mise à niveau avait tout désactivé. J’ai redémarré et j’ai ensuite pu sélectionner la mise à niveau de docker_manager. Celle-ci a échoué avec :

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

J’ai donc décidé de me connecter au serveur via SSH et d’essayer une reconstruction, voici ce que j’ai obtenu :

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# 

Avez-vous des plugins dans votre fichier app.yml ?
Quand ce genre de chose m’arrive, c’est généralement un plugin défectueux qui doit être mis en commentaire avant que la reconstruction ne fonctionne.

1 « J'aime »

Quelle quantité de mémoire avez-vous ? Essayez de redémarrer votre machine et de reconstruire à nouveau.

1 « J'aime »

Que vous dit free ?

Personnellement, si une sauvegarde échoue, je n’essaierais pas de mettre à jour. Une sauvegarde - y compris en avoir une copie téléchargée - est pour moi un prérequis. Ce n’est peut-être pas un commentaire utile pour le moment, mais je pense qu’il faut le dire.

3 « J'aime »

Dans votre autre publication, vous donnez un peu plus d’informations sur l’échec de rake :

2 « J'aime »

Ce n’est pas le problème. Cela ressemble à l’absence d’une clé pour télécharger la base de données max mind. Le problème est ci-dessus.

1 « J'aime »

Si le problème est un échec de lancement, alors nous nous soucions non seulement de l’utilisation de la RAM et du swap, mais aussi de la configuration du noyau. Si cela apparaît dans les journaux

# ATTENTION : overcommit_memory est défini sur 0 ! La sauvegarde en arrière-plan peut échouer dans des conditions de faible mémoire. Pour résoudre ce problème, ajoutez 'vm.overcommit_memory = 1' à /etc/sysctl.conf, puis redémarrez ou exécutez la commande 'sysctl vm.overcommit_memory=1' pour que cela prenne effet.

alors cela vaut la peine de faire comme conseillé. Voir aussi

Mon installation de Discourse est très générique. Après un redémarrage, j’ai obtenu une sauvegarde propre. J’ai donc finalement décidé de faire une installation à partir de zéro. L’installation a échoué avec les mêmes erreurs que celles que j’ai publiées ci-dessus. J’utilise Discourse avec 6 Go de mémoire dans un conteneur LXD depuis quatre ans sans problème. L’utilisation de la mémoire est stable à 1,9 Go. Lors d’une mise à niveau, la mémoire atteint un pic de 5,1 Go. Ma sauvegarde de base de données ne contient que 30 Go de données, mon installation est donc petite par rapport à d’autres. Ma configuration fonctionne sur Ubuntu 22.04. Devrais-je utiliser une autre distribution ?

1 « J'aime »

J’ai peut-être 40 utilisateurs et 150 publications. Le système utilise 1,8 Go de mémoire et je lui ai alloué 6 Go de mémoire. Quelle quantité de mémoire est nécessaire pour qu’une reconstruction fonctionne ? Cela a toujours été suffisant par le passé.

Je n’utilise aucun plugin.

Pouvez-vous partager votre fichier app.yml ? Je crains que vous n’ayez une clé API invalide pour MaxMind.

1 « J'aime »

Voici mon app.yml.

## voici le modèle de conteneur Docker Discourse tout-en-un et autonome
##
## Après avoir apporté des modifications à ce fichier, vous DEVEZ reconstruire
## /var/discourse/launcher rebuild app
##
## SOYEZ *TRÈS* PRUDENT LORS DE LA MODIFICATION !
## LES FICHIERS YAML SONT EXTRÊMEMENT SENSIBLES AUX ERREURS D'ESPACEMENT OU D'ALIGNEMENT !
## visitez http://www.yamllint.com/ pour valider ce fichier si nécessaire

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Décommentez ces deux lignes si vous souhaitez ajouter Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

## quels ports TCP/IP ce conteneur doit-il exposer ?
## Si vous souhaitez que Discourse partage un port avec un autre serveur web comme Apache ou nginx,
## voir https://meta.discourse.org/t/17247 pour plus de détails
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Définissez db_shared_buffers à un maximum de 25 % de la mémoire totale.
  ## sera défini automatiquement par bootstrap en fonction de la RAM détectée, ou vous pouvez le remplacer
  db_shared_buffers: "4096MB"

  ## peut améliorer les performances de tri, mais ajoute de la consommation de mémoire par connexion
  #db_work_mem: "40MB"

  ## Quelle révision Git ce conteneur doit-il utiliser ? (défaut : 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

  ## Combien de requêtes web concurrentes sont prises en charge ? Dépend de la mémoire et des cœurs de CPU.
  ## sera défini automatiquement par bootstrap en fonction des CPU détectés, ou vous pouvez le remplacer
  UNICORN_WORKERS: 8

  ## TODO : Le nom de domaine auquel cette instance Discourse répondra
  ## Requis. Discourse ne fonctionnera pas avec un simple numéro IP.
  DISCOURSE_HOSTNAME: discussion.scottibyte.com

  ## Décommentez si vous souhaitez que le conteneur soit démarré avec le même
  ## nom d'hôte (-h option) que celui spécifié ci-dessus (défaut "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO : Liste des e-mails délimités par des virgules qui seront faits administrateurs et développeurs
  ## lors de la première inscription exemple 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'aaaaaa@gmail.com'

  ## TODO : Le serveur de messagerie SMTP utilisé pour valider les nouveaux comptes et envoyer des notifications
  # L'adresse, le nom d'utilisateur et le mot de passe SMTP sont requis
  # ATTENTION le caractère '#' dans le mot de passe SMTP peut causer des problèmes !
  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           # (optionnel, défaut true)
  DISCOURSE_SMTP_DOMAIN: discussion.scottibyte.com
  DISCOURSE_NOTIFICATION_EMAIL: noreply@scottibyte.com

  ## Si vous avez ajouté le modèle Lets Encrypt, décommentez ci-dessous pour obtenir un certificat SSL gratuit
  LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

  ## L'adresse CDN http ou https pour cette instance Discourse (configurée pour tirer)
  ## voir https://meta.discourse.org/t/14857 pour plus de détails
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
  
  ## La clé d'adresse IP de géolocalisation Maxmind pour la recherche d'adresse IP
  ## voir https://meta.discourse.org/t/-/137387/23 pour plus de détails
  DISCOURSE_MAXMIND_LICENSE_KEY: aaaaaaaa

## Le conteneur Docker est sans état ; toutes les données sont stockées dans /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Les plugins vont ici
## voir https://meta.discourse.org/t/19157 pour plus de détails
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## Toutes les commandes personnalisées à exécuter après la construction
run:
  - exec: echo "Début des commandes personnalisées"
  ## Si vous souhaitez définir l'adresse e-mail 'De' pour votre première inscription, décommentez et modifiez :
  ## Après avoir reçu le premier e-mail d'inscription, remettez la ligne en commentaire. Elle ne doit s'exécuter qu'une seule fois.
  # - exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "Fin des commandes personnalisées"

Lors d’une nouvelle compilation, j’ai essayé une nouvelle clé Maxmind et j’ai obtenu la même erreur.

Supprimez ou commentez la ligne avec DISCOURSE_MAXMIND_LICENSE_KEY et reconstruisez.

1 « J'aime »

Et si cela peut aider. Tout fonctionne bien maintenant. Les mises à jour sont ce qui casse.

J’ai commenté la clé Maxmind dans le YAML. La reconstruction est en cours. D’ailleurs, les notifications par e-mail ont toujours bien fonctionné. Dernièrement, l’e-mail pour le lien de téléchargement de sauvegarde ne fonctionne plus. Je vais simplement dans le dossier et télécharge la sauvegarde via sftp et cela fonctionne et le journal de sauvegarde se termine avec succès. Alors, quel est selon vous le problème avec la clé Maxmind ?

@Falco Eh bien, apparemment, la clé Maxmind était le coupable.


Comme vous pouvez le voir, la reconstruction a fonctionné et le forum est à la dernière version. Une nouvelle sauvegarde a fonctionné depuis l’interface graphique, tout comme la notification de sauvegarde et même le lien de téléchargement de la sauvegarde. Tout fonctionne bien.
Merci, vous êtes le maître ! Excellents commentaires et merveilleuse aide, monsieur.

Donc, même avec une nouvelle clé Maxmind, je n’ai eu aucune chance. Avez-vous des conseils à ce sujet ?

3 « J'aime »

Donc une clé invalide cassera la build mais une clé nulle ne le fera pas ?

2 « J'aime »

Idéalement, aucun des deux ne le fera, il suffit de confirmer ce qui est exactement cassé avec les étapes de reproduction appropriées afin que nous puissions déposer un rapport et assigner un ingénieur pour le corriger.

2 « J'aime »

Tout ce que j’ai fait, c’est commenter la clé et la reconstruction a parfaitement fonctionné. Avec une clé valide (et même une nouvelle clé), la construction échoue avec les journaux que j’ai fournis.

1 « J'aime »