Rebake falha ao alterar apenas o nome do subdomínio

Olá

Recentemente, copiei a pasta do banco de dados /shared do nosso servidor de produção para o de staging (para que ambos os ambientes ficassem compatíveis).

Percebi que os links estavam apontando para o domínio anterior, então segui este guia.

Ao executar este comando dentro do container:

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

Recebi um erro de duplicate key value:

Reescrevendo todas as ocorrências de forums.coretabs.net para discourse.coretabs.net
ESTA TAREFA VAI REESCREVER DADOS, TEM CERTEZA (digite SIM)
SIM
Erro: ERRO: valor de chave duplicada viola a restrição de unicidade "index_incoming_domains_on_name_and_https_and_port"
DETALHE: A chave (name, https, port)=(discourse.coretabs.net, t, 443) já existe.
O remap foi aplicado apenas parcialmente devido ao erro acima. Por favor, execute o script novamente.

Sim, acho que não temos tratamento de conflitos integrado e você tem links de entrada para ambos os domínios.

Você precisará excluir manualmente itens da tabela de problemas antes de executar essa tarefa.

Obrigado, Sam, pela resposta rápida!

Você poderia me indicar onde posso manipular a tabela problemática?

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

Provavelmente é o que você deseja. Isso levará a uma pequena inconsistência de dados, mas pelo menos o remapeamento provavelmente funcionará.

Então, eis o que fiz:

  1. Executei o comando que você indicou (sem o from :grin:)

  2. Executei o rebake novamente, e agora ele parou aqui:

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. Pesquisei no Google por "unique_post_links" e descobri que a tabela se chama topic_links, conforme o schema.sql

  2. Desta vez, os links estavam parciais, então usei uma consulta de substituição:

DB.exec "update topic_links set url=REPLACE(url, 'discourse.coretabs.net', 'discourse-old.coretabs.net')"
  1. Executei o rebake novamente.

Funcionou perfeitamente, obrigado, Sam :rose: