La rebake échoue lors du changement du nom de sous-domaine uniquement

Bonjour,

J’ai récemment copié le dossier de base de données /shared de notre serveur de production vers notre serveur de préproduction (pour que les deux environnements soient identiques).

J’ai remarqué que les liens pointaient vers l’ancien domaine, j’ai donc suivi ce guide.

Lors de l’exécution de cette commande dans le conteneur :

discourse remap forums.coretabs.net discourse.coretabs.net

J’obtiens une erreur de valeur de clé en double :

Réécriture de toutes les occurrences de forums.coretabs.net vers discourse.coretabs.net
CETTE TÂCHE RÉÉCRIRA DES DONNÉES, ÊTES-VOUS SÛR (tapez OUI)
OUI
Erreur : ERREUR : la valeur de clé en double viole la contrainte d'unicité "index_incoming_domains_on_name_and_https_and_port"
DÉTAIL : La clé (name, https, port)=(discourse.coretabs.net, t, 443) existe déjà.
La réaffectation n'a été appliquée que partiellement en raison de l'erreur ci-dessus. Veuillez relancer le script.

Oui, je ne pense pas que la gestion des conflits soit intégrée et vous avez des liens entrants pour les deux domaines.

Vous devrez supprimer manuellement des éléments de la table problématique avant d’exécuter cette tâche.

Merci Sam pour ta réponse rapide !

Pourrais-tu s’il te plaît m’indiquer où je peux modifier la table problématique ?

rails c
DB.exec "update from incoming_domains set name='discourse-old.coretabs.net' where name = 'discourse.coretabs.net'"

C’est probablement ce que vous voulez. Cela entraînera une légère incohérence des données, mais au moins la réaffectation fonctionnera probablement.

Voici donc ce que j’ai fait :

  1. J’ai exécuté la commande que vous avez indiquée (sans from :grin:)

  2. J’ai relancé le rebake, mais cette fois-ci il s’est arrêté ici :

Rewriting all occurences of forums.coretabs.net to discourse.coretabs.net
THIS TASK WILL REWRITE DATA, ARE YOU SURE (type YES)
YES
incoming_domains=1
incoming_referers=3
invites=1
javascript_caches=1
post_revisions=509
posts=84
single_sign_on_records=1099
theme_fields=4
topic_custom_fields=4
Error: ERROR:  duplicate key value violates unique constraint "unique_post_links"
DETAIL:  Key (topic_id, post_id, url)=(69, 212, https://discourse.coretabs.net/t/topic/365) already exists.
The remap has only been partially applied due to the error above. Please re-run the script again.
  1. J’ai cherché "unique_post_links" sur Google et j’ai découvert que la table concernée s’appelle topic_links dans le schema.sql

  2. Cette fois, les liens sont partiels, alors j’ai utilisé une requête de remplacement :

DB.exec "update topic_links set url=REPLACE(url, 'discourse.coretabs.net', 'discourse-old.coretabs.net')"
  1. J’ai relancé le rebake.

Cela fonctionne parfaitement, merci Sam :rose: