Il rebake fallisce quando si modifica solo il nome del sottodominio

Ciao

Ho recentemente copiato la cartella del database /shared dal nostro server di produzione a quello di staging (per far coincidere entrambi gli ambienti).

Ho notato che i link puntavano al dominio precedente, quindi ho seguito questa guida.

Eseguendo questo comando all’interno del container:

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

ho ricevuto un errore di duplicate key value:

Riscrittura di tutte le occorrenze di forums.coretabs.net in discourse.coretabs.net
QUESTA OPERAZIONE RISCRIVERÀ I DATI, SEI SICURO (digita YES)
YES
Errore: ERRORE: valore di chiave duplicato viola il vincolo univoco "index_incoming_domains_on_name_and_https_and_port"
DETTAGLIO: La chiave (name, https, port)=(discourse.coretabs.net, t, 443) esiste già.
La rimappatura è stata applicata solo parzialmente a causa dell'errore sopra riportato. Si prega di rieseguire lo script.

Sì, non credo che abbiamo una gestione dei conflitti integrata e hai link in ingresso per entrambi i domini.

Dovrai eliminare manualmente i dati dalla tabella dei problemi prima di eseguire questa attività.

Grazie, Sam, per la risposta rapida!

Potresti indicarmi dove posso modificare la tabella problematica?

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

È probabilmente ciò che desideri; causerà una leggera inconsistenza nei dati, ma almeno la rimappatura dovrebbe funzionare.

Ecco cosa ho fatto:

  1. Ho eseguito il comando che hai indicato (senza from :grin:)

  2. Ho eseguito di nuovo il rebake, ora si è fermato qui:

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. Ho cercato su Google "unique_post_links" e ho scoperto che la tabella si chiama topic_links nello schema.sql

  2. Questa volta i link sono parziali, quindi ho usato una query di sostituzione:

DB.exec "update topic_links set url=REPLACE(url, 'discourse.coretabs.net', 'discourse-old.coretabs.net')"
  1. Ho eseguito di nuovo il rebake.

Funziona perfettamente, grazie Sam :rose: