サブドメイン名のみを変更するとリベイクが失敗する

こんにちは

最近、本番環境からステージングサーバーに /shared データベースフォルダをコピーしました(両方の環境を一致させるため)。

リンクが以前のドメインを指していることに気づき、このガイドに従いました。

コンテナ内でこのコマンドを実行すると:

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

duplicate key value エラーが発生します:

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" を Google で検索したところ、対応するテーブルは schema.sqltopic_links であることが分かりました。

  2. 今回はリンクが部分的だったため、replace クエリを使用しました:

DB.exec "update topic_links set url=REPLACE(url, 'discourse.coretabs.net', 'discourse-old.coretabs.net')"
  1. 再度 rebake を実行しました。

見事に動作しました。Sam さん、ありがとう :rose: