Rebake falla al cambiar solo el nombre del subdominio

Hola

Recientemente copié la carpeta de la base de datos /shared de nuestro servidor de producción al de staging (para que ambos entornos coincidan).

Me di cuenta de que los enlaces apuntan al dominio anterior, así que seguí esta guía.

Al ejecutar este comando dentro del contenedor:

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

Obtengo un error de valor de clave duplicado:

Reescribiendo todas las ocurrencias de forums.coretabs.net a discourse.coretabs.net
ESTA TAREA REESCRIBIRÁ DATOS, ¿ESTÁS SEGURO (escribe SÍ)
SÍ
Error: ERROR:  el valor de clave duplicado viola la restricción de unicidad "index_incoming_domains_on_name_and_https_and_port"
DETALLE:  La clave (name, https, port)=(discourse.coretabs.net, t, 443) ya existe.
El remapeo solo se ha aplicado parcialmente debido al error anterior. Vuelva a ejecutar el script nuevamente.

Sí, no creo que tengamos la gestión de conflictos integrada y tienes enlaces entrantes para ambos dominios.

Vas a necesitar eliminar manualmente elementos de la tabla de problemas antes de ejecutar esta tarea.

¡Gracias, Sam, por la respuesta rápida!

¿Podrías indicarme dónde puedo manipular la tabla problemática?

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

Probablemente es lo que necesitas. Esto podría generar una pequeña inconsistencia en los datos, pero al menos la remapeación debería funcionar.

Así es lo que hice:

  1. Ejecuté el comando que mencionaste (sin from :grin:)

  2. Ejecuté el rebake nuevamente, pero ahora se detuvo aquí:

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. Busqué en Google "unique_post_links" y descubrí que la tabla se llama topic_links en el schema.sql

  2. Esta vez los enlaces estaban parciales, así que usé una consulta de reemplazo:

DB.exec "update topic_links set url=REPLACE(url, 'discourse.coretabs.net', 'discourse-old.coretabs.net')"
  1. Ejecuté el rebake nuevamente.

Funcionó a la perfección, gracias Sam :rose: