仅更改子域名时 Rebake 失败

你好

我最近将生产环境的 /shared 数据库文件夹复制到了预发布服务器(以使两个环境保持一致)。

我意识到链接仍指向之前的域名,因此我遵循了这份 指南

在容器内运行此命令时:

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

我收到了一个“重复键值”错误:

正在重写 forums.coretabs.net 到 discourse.coretabs.net 的所有出现
此任务将重写数据,您确定吗(输入 YES)
YES
错误:ERROR:  duplicate key value violates unique constraint "index_incoming_domains_on_name_and_https_and_port"
详细信息:Key (name, https, port)=(discourse.coretabs.net, t, 443) 已存在。
由于上述错误,重映射仅部分应用。请再次运行脚本。

是的,我认为我们还没有内置冲突处理功能,而且两个域名都有传入链接。

在运行此任务之前,您需要手动从问题表中删除相关数据。

谢谢 Sam 的快速回复!

能否请您指点我哪里可以修改那个有问题的表格?

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

这很可能就是你想要的。虽然会导致轻微的数据不一致,但至少重映射应该能正常工作。

以下是我所做的操作:

  1. 我运行了你指出的命令(不带 from :grin:

  2. 再次运行 rebake,现在它停在了这里:

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. 我搜索了 "unique_post_links",发现其对应的表在 schema.sql 中名为 topic_links

  2. 这次链接是部分的,所以我使用了一个替换查询:

DB.exec "update topic_links set url=REPLACE(url, 'discourse.coretabs.net', 'discourse-old.coretabs.net')"
  1. 再次运行 rebake。

问题完美解决,感谢 Sam :rose: