PG::UndefinedTable: خطأ: العلاقة "voice_rooms" غير موجودة

واجهتُ هذه المشكلة أيضًا - وتشغيل ذلك السكربت (النص البرمجي) تطلّب بعض التوجيه من ask.discourse.com، إذ ليس الأمر سهلًا للغاية لمديري الأنظمة الأقل خبرة!

إليك ملخص لبقية الأشخاص:


لمن يواجه هذه المشكلة في التثبيت القياسي عبر docker، إليك الطريقة الفعّالة لتشغيل السكربت المذكور أعلاه.

احصل على واجهة سطر أوامر (shell) وافتح psql.

  • حاوية واحدة:

    cd /var/discourse
    ./launcher start app   ## مطلوب فقط إذا كنت قد واجهت إعادة بناء فاشلة مسبقًا
    ./launcher enter app
    su -c 'psql discourse' postgres
    
    
  • إعداد حاويتين:

    cd /var/discourse
    ./launcher enter data
    su -c 'psql discourse' postgres
    
    

يجب أن ترى موجهًا (prompt) يظهر عليه discourse=#. إذا كنت غير متأكد، نفّذ الأمر \conninfo.

شغّل السكربت.

الصق الكتلة الكاملة DO $$ ... $$; من منشور نات أعلاه عند الموجه واضغط على Enter. عند النجاح، ستظهر إشعارات مثل:

NOTICE:  Renamed resenha_rooms to voice_rooms
NOTICE:  Renamed resenha_room_memberships to voice_room_memberships
...

إذا ظهر استثناء (exception) بدلاً من ذلك (مثل: “Both Resenha and Voice tables exist. Nothing was changed.”)، توقف والصق الرسالة هنا مرة أخرى — السكربت مصمم ليكون آمنًا عمدًا ولا يغيّر شيئًا في هذه الحالة.

اخرج وأعد البناء.

\q
exit

ثم عد إلى المضيف (host):

./launcher rebuild app          # حاوية واحدة
./launcher rebuild web_only     # حاويتان (يمكن أيضًا القيام بذلك عبر bootstrap بالطبع)

قد تحتاج إلى إعادة بناء مرتين — الأولى تُنهي حالة الترحيل (migration) التي طُبّقت جزئيًا، والثانية تكمل العملية بنجاح.