DuplicateColumnとマルチサイト:migrateが失敗しました

2.9.0.beta2 から 2.9.0.beta4 へのアップグレード中に、PG::DuplicateColumn: ERROR: column "bookmarkable_id" of relation "bookmarks" already exists というエラーメッセージが表示されて失敗しました。Recovering from failed/partially applied upgrade のアドバイスに従って、再びオンラインに戻ることができました。この問題は、(Docker 化された) マルチサイトのインストールに特有のものと思われるため、新しいトピックを開始します。

問題は、multisite:migrate が、以前のマイグレーションの一部として既に実行されたマイグレーションを再度実行しようとしたことにあるようです。結果として PG::DuplicateColumn: ERROR: column "bookmarkable_id" of relation "bookmarks" already exists が発生しました。エラーメッセージに基づくと、これはポリモーフィックなブックマーク機能、DEV: Re-add polymorphic bookmark columns by martin-brennan · Pull Request #16261 · discourse/discourse · GitHub (ping @martin?) に関連している可能性があります。

問題に遭遇した後、私の応急処置は次のとおりでした。

  1. 設定ファイル containers/web_only.yml - exec: cd /var/www/discourse && sudo -E -u discourse bundle exec rake multisite:migrate という行をコメントアウトしました。
  2. ブックマークに関連する (部分的に適用された?) マイグレーションを手動で削除しました: ./launcher enter data を実行し、psql を使用して両方の Discourse データベースにログインし、ALTER TABLE bookmarks DROP COLUMN bookmarkable_id, DROP COLUMN bookmarkable_type; を実行しました。
  3. 再ビルドを再実行しました: ./launcher rebuild web_only 2>&1

multisite:migrate が実行されなかったことで、今、何が欠けている可能性がありますか? ご意見をお聞かせいただけると幸いです。両方のサイトは機能しているようです。:crossed_fingers:

「いいね!」 1

それなら、もう一度アップグレードを実行して、問題がないか確認するのが良いと思います。

それを行う理由について何か考えはありますか?それとも、マルチサイト移行の実行から何を期待できるかについてのヒントはありますか?ご存知のとおり、私は理解できないスクリプトを実行することに抵抗があります。:slightly_smiling_face:

ある程度は修正方法がわかっているし、次にアップグレードする頃には(私と同じようなタイプなら)完全に忘れてしまっているだろうからです。他の人がこの問題を修正したときに観察したことと同じだと思うので、うまくいくと確信しています。

「いいね!」 1

なるほど、元々あったカラムを削除する post-migrate を実行したことがないようです。これは DEV: Re-add polymorphic bookmark columns by martin-brennan · Pull Request #16261 · discourse/discourse · GitHub で私が削除したものです。 discourse/db/migrate/20220322024216_add_bookmark_polymorphic_columns.rb at 037172beaae0743176eee653bd2cd4cd1ce5c7e9 · discourse/discourse · GitHub でカラムを再追加する前に、カラムが存在するかどうかを確認する必要があるかもしれません。そのためのコミットを行います。

これで役立つはずです。コミットをマージしました。

「いいね!」 4