Salut,
J’ai essayé de changer le nom de domaine d’un discourse, en suivant Change the domain name or rename your Discourse. Les choses semblaient correctes jusqu’à ce que je lance la commande
discourse remap talk.foo.com talk.bar.com
J’ai obtenu ceci :
root@plop:/var/www/discourse# discourse remap plop.domain.fr forum.plop.fr
Rewriting all occurrences of plop.domain.fr to forum.plop.fr
THIS TASK WILL REWRITE DATA, ARE YOU SURE (type YES)
YES
backup_metadata=1
email_logs=991
javascript_caches=1
post_revisions=126
post_search_data=20
posts=782
stylesheet_cache=446
theme_settings=1
Error: ERROR: duplicate key value violates unique constraint "unique_post_links"
DETAIL: Key (topic_id, post_id, url)=(274, 455, http://forum.plop.fr) already exists.
The remap has only been partially applied due to the error above. Please re-run the script again.
Cela ressemblait à l’erreur signalée ici, mais était légèrement différente. Je suppose que le bug est lié au fait que le nouveau domaine a été discuté sur le forum.
Pour y remédier, je n’ai pas pu lancer quelque chose comme db:exec pour forcer les commandes de base de données via rake. Je l’ai donc fait directement via postgres :
- connecter la base de données :
# cd /var/discourse/
# ./launcher enter app
# su - postgres
$ psql
postgres=# \c discourse
- essayer de remplacer directement l’URL dans la table
discourse=# update topic_links set url=REPLACE(url, 'plop.domain.fr', 'forum.plop.fr');
ERROR: duplicate key value violates unique constraint "unique_post_links"
DETAIL: Key (topic_id, post_id, url)=(274, 455, http://forum.plop.fr) already exists.
- en cas d’erreur : forcer un remplacement qui ne casse pas l’unicité, par exemple
forum.plop.fr/:
discourse=# update topic_links set url=REPLACE(url, 'plop.domain.fr', 'forum.plop.fr/') where topic_id=274;
- répéter 3. jusqu’à ce que 2. se termine sans erreur. Puis quitter pg.
discourse=# update topic_links set url=REPLACE(url, 'plop.domain.fr', 'forum.plop.fr');
UPDATE 1349
discourse=#
\q
- relancer le remap et le rebake :
$ exit
# discourse remap plop.domain.fr forum.plop.fr
- vérifier et corriger manuellement les sujets problématiques (dont le contenu peut être incohérent), en visitant
forum.plop.fr/t/topic/274et d’autres.