アップグレードの失敗/部分適用からの復旧

Discourse インスタンスのアップグレードを試みましたが、いくつかの問題により、部分的に適用された状態で失敗したようです。./launcher rebuild app を実行すると、次のようなエラーメッセージが表示され、これはすでに(部分的に)適用されたマイグレーションを示しているようです。

I, [2022-03-24T21:13:16.043071 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

PG::DuplicateColumn: ERROR:  column "bookmarkable_id" of relation "bookmarks" already exists

この状態から復旧する方法(または、最初からやり直す必要があるかどうか)についてのガイダンスがあれば幸いです。よろしくお願いします!

「いいね!」 1

古いコンテナを起動するには

./launcher start app

を実行してください。これで元に戻ります。

「いいね!」 2

はい、承知しております(そして、すでに実行しました)。しかし、アップグレードに関しては次に何をすべきか疑問に思っています。

「いいね!」 2

そうですか。それは役に立たなかったようですね :person_shrugging:

似たような問題を抱えていましたが、私の解決策がお役に立つ可能性は低いようです。

app.yml で SKIP_POST_DEPLOYMENT_MIGRATIONS を設定していませんか?もしそうなら、データベースをゼロに設定して移行し、再構築する必要がありますが、それが問題だとは思いません。

いいえ、そうは見えません。

それが私が考えていたことです。ですから、ある特定の地点から現在の地点への移行能力に関連する実際の問題があるのかもしれません。しかし、それは起こるべきではありません。

これを見てください:

エラーが発生していたテーブルをすべて(一つずつ、最終的に7つになりました)空にしたところ、エラーなしでアプリを再構築できるようになりました。

あなたのケースでは、問題はカラムにあるようです:

PG::DuplicateColumn: ERROR: column "bookmarkable_id" of relation "bookmarks" already exists

おそらく、それが属するテーブルを見つけて空にする必要があるでしょう。あるいは、単にそのカラムを削除することもできます。

問題は、部分的に移行した場合に、それらのテーブルがすでに作成されているため、再度作成できずにエラーが返されることにあると思います。このプロセスに条件を追加して、エラーが発生しないようにすることは可能でしょうか?(私は専門家ではありません) @pfaffman

その通りだと思います、@undasein

ブックマークテーブルから bookmarkable_id 列を削除したいのだと思います。コンテナに入り、次のようにPostgresに入った後:

cd /var/discourse
./launcher enter app
su - postgres
psql

次に次を実行します:

ALTER TABLE bookmarks 
DROP COLUMN bookmarkable_id
DROP COLUMN bookmarkable_type;

しかし、フォーラムが稼働している場合、データベースのみのバックアップを取得しておくのも悪い考えではありません。もし稼働していない場合は、上記の enter app の行の後に discourse backup でバックアップできます。

「いいね!」 1

私も同じ問題が発生しています!これが正しい解決策ですか?

それが私の推測でした。試してみて、結果を教えてください。

私はディスコースに詳しくありません。

@sam、今後の進め方について何かアイデアはありますか?標準のインストールとアップグレードは悪夢であることが判明しました。

上記は、この問題を解決するための正しい方法ですか?

よろしくお願いします。

残念ながら、機能しませんでした。まだ以下のエラーが発生しています。

PG::DuplicateColumn: ERROR:  column "bookmarkable_id" of relation "bookmarks" already exists

これらのコマンドの後に、他に取るべきアクションはありましたか?

ALTER TABLE bookmarks 
DROP COLUMN bookmarkable_id
DROP COLUMN bookmarkable_type;

ご協力ありがとうございます。

ニックさん、こんにちは。

これを再現しようとしていますが、あなたのインスタンスのコミットは何ですか?
次を試すことができます。

version: cd7ce52138bed391d5efc56366e7a6517a6079e7

これを app.yml に追加してください。これは10日前のもので、同様の問題があったと思われるロールバックされたコミットのやり直しの直前です。

「いいね!」 2

ベンさん、おはようございます。

これを実行するためのコマンドを教えていただけますか?

アップデートなどは簡単にできますが、問題が発生したのは初めてで、正直に言うと、全く慣れない状況です(笑)

./launcher start app を実行し、https://your.domain/admin でインストールされているバージョンを確認していただけますでしょうか。手順を再現して確認したいです。プラグインはありますか?

「いいね!」 2

ベンさん、こんにちは。

インストール済みバージョン: 2.9.0.beta2
(5374e587a3)

インストール済みプラグイン:
discourse-reactions
docker_manager
styleguide

よろしくお願いします。
ニック

./launcher start app
-bash: ./launcher: No such file or directory
 cd /var/discourse

Before

./launcher start app
「いいね!」 2

サーバー上のUbuntuアップデートをいくつか確認し、すべて最新の状態にしました。

もう一度試しましたが、まだ以下のエラーが発生します。

PG::DuplicateColumn: ERROR:  column "bookmarkable_id" of relation "bookmarks" already exists

これはもっともらしい解決策のようです。これにアップグレードして、現在のバージョンに到達できるかもしれませんか?そのようなことが私には理にかなっています。

「いいね!」 1