ディスコースドメイン変更時のリマップ失敗

こんにちは。

Change the domain name or rename your Discourse に従い、Discourse のドメイン名を変更しようとしました。コマンドを起動するまでは問題なさそうでしたが、以下のエラーが発生しました。

root@plop:/var/www/discourse# discourse remap plop.domain.fr forum.plop.fr
Rewriting all occurrences of plop.domain.fr to forum.plop.fr
THIS TASK WILL REWRITE DATA, ARE YOU SURE (type YES)
YES
backup_metadata=1
email_logs=991
javascript_caches=1
post_revisions=126
post_search_data=20
posts=782
stylesheet_cache=446
theme_settings=1
Error: ERROR:  duplicate key value violates unique constraint "unique_post_links"
DETAIL:  Key (topic_id, post_id, url)=(274, 455, http://forum.plop.fr) already exists.
The remap has only been partially applied due to the error above. Please re-run the script again.

これは、こちらで報告されているエラーと似ているようでしたが、少し異なっていました。新しいドメインがフォーラムで議論されていたことがバグに関連しているのではないかと推測しています。

これを克服するために、rake を介して db:exec のようなものを起動できなかったため、Postgres を直接使用しました。

  1. データベースに接続します。
# cd /var/discourse/
# ./launcher enter app
# su - postgres
$ psql
postgres=# \c discourse
  1. テーブル内の URL を直接置き換えようとします。
discourse=# update topic_links set url=REPLACE(url, 'plop.domain.fr', 'forum.plop.fr');
ERROR:  duplicate key value violates unique constraint "unique_post_links"
DETAIL:  Key (topic_id, post_id, url)=(274, 455, http://forum.plop.fr) already exists.
  1. エラーが発生した場合:一意性を壊さないように強制的に置き換えます。例:forum.plop.fr/
discourse=# update topic_links set url=REPLACE(url, 'plop.domain.fr', 'forum.plop.fr/') where topic_id=274;
    1. がエラーなく完了するまで 3. を繰り返します。その後、pg を終了します。
discourse=# update topic_links set url=REPLACE(url, 'plop.domain.fr', 'forum.plop.fr');
UPDATE 1349
discourse=#
\q
  1. remap と rebake を再起動します。
$ exit
# discourse remap plop.domain.fr forum.plop.fr
  1. 問題のあるトピック(コンテンツが矛盾している可能性がある)を手動で確認し、修正します。forum.plop.fr/t/topic/274 などにアクセスします。
「いいね!」 1

もし問題が事後的に正しく理解できているなら、doc は、このコマンドを実行する前に talk.bar.com の古い出現箇所をすべて削除することを示唆している可能性があります。これは次のように簡単に行うことができます。

discourse remap talk.bar.com talk.foo-or-bar-that-s-the-question.com

(試してはいません。)

「いいね!」 1