Errore di rimappatura quando si cambia discourse domain

Ciao,
Ho provato a cambiare il nome di dominio di discourse, seguendo Change the domain name or rename your Discourse. Le cose sembravano a posto finché non ho eseguito il comando

discourse remap talk.foo.com talk.bar.com

Ho ottenuto quanto segue:

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.

Sembrava simile all’errore segnalato qui, ma era leggermente diverso. Suppongo che il bug sia correlato al fatto che il nuovo dominio è stato discusso sul forum.

Per superarlo, non sono riuscito a eseguire qualcosa come db:exec per forzare i comandi db tramite rake. Quindi l’ho fatto direttamente tramite postgres:

  1. connetti il database:
# cd /var/discourse/
# ./launcher enter app
# su - postgres
$ psql
postgres=# \c discourse
  1. prova a sostituire direttamente l’url nella tabella
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.
  1. in caso di errore: forza una sostituzione che non rompa l’unicità, ad esempio forum.plop.fr/:
discourse=# update topic_links set url=REPLACE(url, 'plop.domain.fr', 'forum.plop.fr/') where topic_id=274;
  1. ripeti 3. finché 2. non termina senza errori. Quindi esci da pg.
discourse=# update topic_links set url=REPLACE(url, 'plop.domain.fr', 'forum.plop.fr');
UPDATE 1349
discourse=#
\q
  1. riavvia il remap e il rebake:
$ exit
# discourse remap plop.domain.fr forum.plop.fr
  1. controlla manualmente e correggi gli argomenti problematici (il cui contenuto potrebbe essere incoerente), visitando forum.plop.fr/t/topic/274 e altri.
1 Mi Piace

Se capisco correttamente il problema a posteriori, il doc potrebbe suggerire di rimuovere tutte le vecchie occorrenze di talk.bar.com prima di eseguire questo comando. Potrebbe essere semplicemente fatto tramite

discourse remap talk.bar.com talk.foo-or-bar-that-s-the-question.com

(Non l’ho provato.)

1 Mi Piace