修正方法は以下のとおりです(心臓の弱い方には向きません)。
- UbuntuをDocker 20以降をサポートするバージョンにアップグレードします。
私たちはUbuntu 16にいたため、少なくともUbuntu 20に到達する必要がありました。そのため、このアップグレードを2回行いました。RELEASE_UPGRADER_ALLOW_THIRD_PARTY=1 do-release-upgrade - Ubuntu 20に到達したら、Dockerを更新する必要がありました。Ubuntuはこれを独自に行うことを拒否しました。
sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # リポジトリをAptソースに追加します: echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update - これによりDocker 28に到達しました。
- 次に以下を実行します。
./launcher rebuild app - これによりPostgresが13から15にアップグレードされます。以下を参照してください。
PostgreSQL 15 update - DBのアップグレードが正常に完了したら、以下を実行しました。
./launcher rebuild app - これにより、欠落している列に関するエラーが発生しました。
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse ERROR: column "require_message" does not exist at character 72 2025-05-18 14:58:28.208 UTC [1455] discourse@discourse STATEMENT: SELECT id, name, name_key, description, notify_type, auto_action_type, require_message, applies_to, position, enabled, score_type FROM "flags" ORDER BY "flags"."position" ASC ** PLUGIN FAILURE ** プラグインの初期化中にこのエラーが発生したため、Discourseを起動できません。 PG::UndefinedColumn: ERROR: column "require_message" does not exist LINE 1: ..._key, description, notify_type, auto_action_type, require_me... ^ - この時点でコンテナを起動する方法がなかったため、app.ymlに移動してすべてのプラグインを無効にし、再度リビルドを実行しました。
- アプリは最終的にリビルドされ、その後、Railsコンソールに入って上記の列を手動で追加できるようになりました。
./launcher enter app rails db ActiveRecord::Base.connection.execute("ALTER TABLE flags ADD COLUMN require_message BOOLEAN DEFAULT FALSE;") exit exit - 列が存在した後、app.ymlに戻り、すべてのプラグインを有効にして再度リビルドしました。
- リビルドは成功し…完了しました!
@pfaffman、週末にもかかわらず迅速な対応ありがとうございました。新しい更新されたドロップレットを作成して移行する予定です。これはWebインターフェースからの迅速なインプレースアップグレードになるはずでした。しかし、スクリプトはDockerの互換性をテストしていないようです。DiscourseがDockerをアップグレードしたときに、互換性のないDockerエラーが発生しました。
Ubuntu 16のような古いバージョンに留まっていたのは完全に私たちのせいでした。安定したシステムの長所と短所の1つは、それが長期間維持される傾向があることです。