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

こんにちは

最近、本番環境からステージングサーバーに /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) は既に存在します。
上記のエラーにより、リマップは部分的にしか適用されませんでした。スクリプトを再度実行してください。

Yeah I don’t think we have conflict handling built in and you have incoming links for both domains.

You are going to need to manually delete stuff from the problem table prior to running this task.

「いいね!」 3

Thanks Sam for the fast reply!

Could you please point me to where I can manipulate the problematic table?

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

Is likely what you want it will lead to a minor data inconsistency but at least the remap will probably work.

「いいね!」 2

So here is what I did:

  1. I run the command you pointed out (without from :grin:)

  2. Run the rebake again, now it stopped here:

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. Googled "unique_post_links" and found that its table is called topic_links from the schema.sql

  2. This time links are partial so I used a replace query:

DB.exec "update topic_links set url=REPLACE(url, 'discourse.coretabs.net', 'discourse-old.coretabs.net')"
  1. Run the rebake again.

Works like a charm, thanks Sam :rose:

「いいね!」 5

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.