يبدو أن Postgres لا يعمل عند تشغيل Discourse محليًا باستخدام Docker

لتطوير الميزات الخاصة بشركتي مقابل واجهة برمجة تطبيقات REST الخاصة بـ Discourse، كنت أتبع 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...]

عندما أفتح Terminal في حاوية discourse_dev وأقوم بتشغيل ls -la /var/run/postgresql/، أرى أنه لا يوجد بالفعل مقبس .s.PGSQL.5432 هنا.

حسنًا، لذلك اعتقدت ربما لم يكن عليّ تشغيل git pull بشكل أعمى أولاً، لذلك قمت بفحص tag v4.4.0 وحتى tag v3.3.0 وحاولت مرة أخرى. لكنني أحصل على نفس الخطأ بالضبط.

يبدو لي أن قاعدة بيانات Postgres لا تعمل داخل حاوية discourse_dev؟

الشيء الغريب هو: إذا قمت بنسخ مستودع discourse repo إلى مجلد جديد (نعم، حتى أحدث كود في الفرع main) وقمت بتشغيل Discourse باستخدام Docker، فلن أحصل على هذا الخطأ وسيبدأ Discourse بنجاح.
ولكن بالطبع لدي قاعدة بيانات فارغة وهذا مؤسف بعض الشيء. أفهم أن البيانات مستمرة داخل tmp/postgres، والتي يمكنني نسخها من المجلد القديم إلى المجلد الجديد. لكن لا يمكنني فعل ذلك بعد الآن لأنني لم أكن أعرف ذلك بالأمس، وفي محاولات استكشاف الأخطاء وإصلاحها بالأمس، قمت بحذف كل مجلد مؤقت ومجلد node_modules ومجلد .pnpm-store وما إلى ذلك. لكن المشكلة لا تزال قائمة.

هل لدى أي شخص فكرة عما يحدث هنا أو ما يمكنني فعله لاستكشاف هذه المشكلة؟

يبدو أن هناك خللاً تامًا في بياناتي المحلية يمنع بدء تشغيل postgres.

عندما أقوم بتشغيل sudo cp -pr discourse/data/postgres discourse2/data/postgres، أحصل على نفس المشكلة بالضبط عند محاولة تشغيل Discourse من مجلد discourse2. وعلى العكس من ذلك، عندما أقوم بحذف discourse/data/postgres، تعمل نسخة Discourse الأصلية لدي بشكل جيد، ولكن بدون بيانات بالطبع :frowning:

نأسف للإزعاج. من المحتمل أن يكون هذا بسبب التحديث الأخير لـ PostgreSQL 15 update. ملفات بيانات PG 13 القديمة غير متوافقة مع صورة discourse_dev التي تعمل الآن بنظام PG 15، ولكن إجراء تحديث قاعدة البيانات الآلي الخاص بنا لم يكن مخصصًا لبيئات التطوير.

هل هناك أي سبب معين لرغبتك في الاحتفاظ بملفات البيانات القديمة؟

يمكنك تشغيل rake dev:populate داخل الحاوية لإنشاء بعض بيانات الاختبار.

إعجاب واحد (1)

لا تستخدم هذا الدليل. يحتاج إلى تحديث أو حذف.

استخدم هذا: Developing Discourse using a Dev Container

إعجابَين (2)

أوه، هذا منطقي جدًا. شكرًا جزيلاً على الشرح. تعلمت اليوم أنه من السيء القيام بسحب git pull بشكل أعمى على الفرع الرئيسي main لأن الكثير يمكن أن ينكسر عن غير قصد :slight_smile:

فقط بسبب بعض إعدادات المسؤول، خاصة فيما يتعلق بـ Discourse Connect. وأيضًا بعض إعدادات واجهة برمجة تطبيقات REST، وبعض إعدادات المكونات الإضافية، وبعض مجموعات المستخدمين اليدوية المحددة. لدينا إعداد SSO خاص في مكانه يدير الفئات ومجموعات المستخدمين (+ عضوية المجموعة) عبر واجهة برمجة تطبيقات REST. المحتوى الفعلي مثل المنشورات والردود لا يهمني على الإطلاق أثناء التطوير، ولهذا السبب أعتقد أن 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.