DockerでローカルのDiscourseを実行していると、Postgresが動いていないようです。

私の会社では、DiscourseインスタンスのREST APIに対していくつかの機能を開発する必要があります。ローカル開発とテストでは、しばらくの間 Install Discourse for development using Docker を正常に参照していました。

開発を最後に始めてから数週間が経ちました。昨日、再びローカルでDiscourseを起動しようとしたので、いつものように git pull && d/boot_dev && d/bundle install && d/rails s を実行しました。しかし、最後のコマンド d/rails s が次のエラーで失敗しました。

URGENT: Failed to initialize site default: ActiveRecord::ConnectionNotEstablished connection to server on socket \"/var/run/postgresql/.s.PGSQL.5432\" failed: No such file or directory
        Is the server running locally and accepting connections on that socket?

/home/discourse/.bundle/gems/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/postgresql_adapter.rb:69:in `rescue in new_client'
[...etc...]

discourse_dev コンテナ内のターミナルを開いて ls -la /var/run/postgresql/ を実行すると、確かに .s.PGSQL.5432 ソケットが存在しないことがわかります。

さて、最初に git pull を無分別に実行すべきではなかったと思ったので、タグ v4.4.0タグ v3.3.0 をチェックアウトして再度試しました。しかし、全く同じエラーが発生します。

Postgresデータベースが discourse_dev コンテナ内で実行されていないように見えますか?

奇妙なのは、discourse リポジトリ を新しいフォルダにクローンし(最新のコードでも main ブランチのもの)、Dockerを使用してDiscourseを起動すると、このエラーは発生せず、Discourseは正常に起動します。
しかし、もちろんデータベースは空の状態です。これは少し残念です。データは tmp/postgres 内に永続化されていることは理解していますが、これは古いフォルダから新しいフォルダにコピーできます。しかし、昨日それを知らなかったため、もうできません。昨日のトラブルシューティングの試みで、すべてのテンポラリフォルダ、node_modules.pnpm-store フォルダなどを削除してしまいました。しかし、問題は依然として残っています。

何が起こっているのか、またはこれをトラブルシューティングするために何ができるか、誰か手がかりはありますか?

ローカルデータに深刻な問題が発生しており、Postgres が起動しません。

sudo cp -pr discourse/data/postgres discourse2/data/postgres を実行すると、discourse2 フォルダから Discourse を起動しようとした際に全く同じ問題が発生します。逆に、discourse/data/postgres を削除すると、元の Discourse インスタンスは問題なく起動しますが、データはありません :frowning:

ご迷惑をおかけして申し訳ありません。これは、最近の PostgreSQL 15 update が原因である可能性が高いです。古い PG 13 のデータファイルは、現在 PG 15 を実行している discourse_dev イメージと互換性がありませんが、自動データベース更新手順は開発環境向けではありませんでした。

古いデータファイルを保持したい特別な理由がありますか?

コンテナ内で rake dev:populate を実行すると、テストデータを生成できます。

「いいね!」 1

そのガイドは使用しないでください。更新または削除が必要です。

こちらを使用してください: Developing Discourse using a Dev Container

「いいね!」 2

ああ、なるほど。説明してくれてありがとう。メインブランチで git pull を無闇に行うのは、意図せず多くのものを壊してしまう可能性があるため、悪い考えだということを学びました :slight_smile:

管理設定、特にDiscourse Connectに関するものです。また、一部のREST API設定、一部のプラグイン設定、および一部の特定のカスタムユーザーグループもあります。REST API経由でカテゴリとユーザーグループ(およびグループメンバーシップ)を管理する、特殊なSSOセットアップがあります。投稿や返信などの実際のコンテンツは、開発中はまったく気にしないため、rake dev:populate は役に立たないと思います。

悪気はありません。

ステージング/本番サイトが既にPG 15に更新されている場合は、そこからバックアップを取得できます。

または、手動で更新してローカルデータファイルを試すこともできます。これは役立つかもしれません。

cd discourse
mkdir data/postgres_new
docker run --rm \
	--entrypoint=/bin/bash \
	-v "$(pwd)/data/postgres":/var/lib/postgresql/13/data \
	-v "$(pwd)/data/postgres_new":/var/lib/postgresql/15/data \
	tianon/postgres-upgrade:13-to-15 \
	-c "apt-get update && apt-get install -y postgresql-13-pgvector postgresql-15-pgvector &&
	docker-upgrade"
mv data/postgres data/postgres_old
mv data/postgres_new data/postgres
docker run --rm -v "$(pwd)/data/postgres":/postgres \
discourse/discourse_dev:release chown -R postgres:postgres /postgres

(ARMベースのプロセッサを使用している場合は、独自のイメージをビルドする必要があります。)

「いいね!」 1

建設的なご返信、誠にありがとうございます!
これは、私と私の同僚がローカルの Discourse インスタンスを 3.4.0 より新しいバージョンにアップグレードする際に役立つでしょう。

しかし、現時点では、新しいデータセットから始めて、必要な設定を再適用しました。幸いなことに、開発者の同僚が Discourse で開発を開始する方法を指示する内部ガイドをすでに作成していました :slight_smile:

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