Échec de la mise à jour sur db_migrate

J’essaie de mettre à jour mon instance Discourse de 2.9.0.beta10 à 3.2.0.beta1.
Je reçois une erreur comme celle-ci :

Tasks: TOP => db:migrate
(Voir la trace complète en exécutant la tâche avec --trace)
I, [2023-09-15T02:32:08.512373 #1]  INFO -- : Compiled js-processor: tmp/js-processor.js
== 20230118020114 AddPublicTopicCountToTags: migrating ========================
-- add_column(:tags, :public_topic_count, :integer, {:default=>0, :null=>false})
   => 0.0021s
-- execute("UPDATE tags t\nSET public_topic_count = x.topic_count\nFROM (\n  SELECT\n    COUNT(topics.id) AS topic_count,\n    tags.id AS tag_id\n  FROM tags\n  INNER JOIN topic_tags ON tags.id = topic_tags.tag_id\n  INNER JOIN topics ON topics.id = topic_tags.topic_id AND topics.deleted_at IS NULL AND topics.archetype != 'private_message'\n  INNER JOIN categories ON categories.id = topics.category_id AND NOT categories.read_restricted\n  GROUP BY tags.id\n) x\nWHERE x.tag_id = t.id\nAND x.topic_count <> t.public_topic_count;\n")

I, [2023-09-15T02:32:08.512848 #1]  INFO -- : Terminating async processes
I, [2023-09-15T02:32:08.512929 #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-09-15T02:32:08.513001 #1]  INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 111
111:signal-handler (2023-09-15 02:32:08.513 UTC [42] LOG:  received fast shutdown request
1694745128) Received SIGTERM scheduling shutdown...
2023-09-15 02:32:08.522 UTC [42] LOG:  aborting any active transactions
2023-09-15 02:32:08.524 UTC [42] LOG:  background worker "logical replication launcher" (PID 51) exited with exit code 1
2023-09-15 02:32:08.526 UTC [46] LOG:  shutting down
111:M 15 Sep 2023 02:32:08.532 # User requested shutdown...
111:M 15 Sep 2023 02:32:08.532 * Saving the final RDB snapshot before exiting.
2023-09-15 02:32:08.768 UTC [42] LOG:  database system is shut down
111:M 15 Sep 2023 02:32:11.475 * DB saved on disk
111:M 15 Sep 2023 02:32:11.475 # Redis is now ready to exit, bye bye...


FAILED
--------------------
Pups::ExecError: cd /var/www/discourse &amp;&amp; su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 787 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"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}

Des idées sur ce qui ne va pas ?
J’ai déjà mis à jour mon instance sans erreur.
Discourse doctor ne me donne aucun indice à rechercher.

Le message ci-dessus fait-il référence à cette instruction SQL :

UPDATE tags t
SET public_topic_count = x.topic_count
FROM (
	SELECT    COUNT(topics.id) AS topic_count,    
	tags.id AS tag_id
	FROM tags
	INNER JOIN topic_tags ON tags.id = topic_tags.tag_id
	INNER JOIN topics ON topics.id = topic_tags.topic_id AND topics.deleted_at IS NULL AND topics.archetype != 'private_message'
	INNER JOIN categories ON categories.id = topics.category_id AND NOT categories.read_restricted
	GROUP BY tags.id
) x
	WHERE x.tag_id = t.id
	AND x.topic_count <> t.public_topic_count;

Parce que si j’exécute directement dans la base de données uniquement le code SELECT, je n’ai pas d’erreurs.
Je vois que la tâche db:migrate ajoute d’abord la colonne par
add_column(:tags, :public_topic_count, :integer, {:default=>0, :null=>false})
Je ne sais pas pourquoi elle échoue ensuite sur la requête ci-dessus ?

Y a-t-il un message en bas du journal indiquant « faites défiler vers le haut et recherchez les messages d’erreur précédents » ? Si oui, trouvez-vous d’autres messages d’erreur ?

2 « J'aime »

Merci pour le conseil, il y avait une erreur avant cela. Je devrais vraiment arrêter de mettre à jour les serveurs après minuit, mes ressources sont faibles à ce moment-là.


Quoi qu’il en soit, pour les futurs lecteurs :
L’erreur a été produite parce qu’en quelque sorte nous avions dans la table des tags plusieurs lignes avec la même valeur dans la colonne name.
Après avoir supprimé les tags avec des lignes dupliquées, la mise à niveau s’est déroulée sans problème.

3 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.