أعمل في gitpod.io، وهي بيئة تطوير متكاملة (IDE) مجانية بضغطة زر واحدة مخصصة لـ GitHub. نستخدم حاليًا Spectrum لمجتمعنا، لكننا نواجه بعض المشاكل معها، ونود جدًا تشغيل نسخة من Discourse لتجربتها وربما الانتقال إليها.
نود استخدام حسابنا في Google Cloud لذلك، إذا أمكن. هل يمكنك توجيهي إلى الاتجاه الصحيح؟ على سبيل المثال، هل خدمة Google Cloud Run الجديدة مناسبة لتشغيل نسخة من Discourse؟
أيضًا، بما أن مهمتنا هي أتمتة جميع إعدادات التطوير بالكامل (على الأقل للمشاريع مفتوحة المصدر)، أود المساهمة في إعداد كامل الأتمتة لـ Discourse، مما يسمح للمساهمين بالبدء في بيئة Discourse جاهزة للكتابة عبر الإنترنت بضغطة زر واحدة (بدلاً من قراءة قوائم طويلة من تعليمات الإعداد وتثبيت/تهيئة مجموعة من التبعيات يدويًا على جهازك الحالي). لقد بدأت بالفعل في العمل على هذا بناءً على إعداد Discourse المؤتمت الممتاز لـ Janitor من @notriddle (مرحبًا!).
لكنني أواجه مشكلة حاليًا، حيث فشلت تعليمات الإعداد مؤخرًا بسبب غياب جدول “polls”. لست متأكدًا بعد كيفية إصلاح ذلك، لكنني سأواصل التحقيق. فقط فكرت في ذكر ذلك هنا.
قد يكون كذلك، لكن الأمر ليس بهذه السهولة. فـ Discourse ليس حاوية بلا حالة (stateless)، وهو ما صُمم Google Cloud Run خصيصًا له. لذلك، ستحتاج إلى وسيلة لإضافة نوع من التخزين الدائم (Persistent Volume) للبيانات التي يحتفظ بها Discourse (مثل الملفات المرفوعة، والصور الرمزية، وقاعدة البيانات).
أنصحك باستخدام مثيل عادي من Google Compute، وهذا كل شيء. وباستخدام نوع من السكريبتات أو أدوات إدارة البنية التحتية، يجب أن تتمكن من أتمتة نشر مثيلات جديدة من Discourse. وقد تساعدك أيضًا هذه الدليل: Install Discourse on Ubuntu or Debian for Development.
ما هي تعليمات الإعداد التي تستخدمها؟ إذا كان جدول polls مفقودًا، فهذا يشير إلى أنك لم تشغّل هجرات الإضافة. يجب تشغيلها تلقائيًا في وضع التطوير. في وضع الاختبار، تحتاج إلى إضافة LOAD_PLUGINS=1 قبل أمر rake db:migrate
هذا يبدو أكثر منطقية من استخدام Cloud Run، حيث قد يستغرق استخراج جميع حالات حاويات Discourse بعض الوقت. شكرًا لتوجيهي إلى الدليل! سأحاول اتباعه لإعداد مثيل Compute، وسأعود للإبلاغ هنا عن نتائجي.
== Seed from /workspace/discourse/db/fixtures/990_settings.rb
Discourse hostname: localhost is not a valid domain for emails!
== Seed from /workspace/discourse/db/fixtures/990_topics.rb
rake aborted!
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "polls" does not exist
LINE 8: WHERE a.attrelid = '"polls"'::regclass
^
تثبيت المطور أبطأ بكثير ومصمم من أجل… التطوير. لذا ستحتاج إلى اتباع تعليمات التثبيت القياسية. من السهل أتمتتها. خدمة التثبيت الخاصة بي مؤتمتة بالكامل الآن (باستثناء إعدادات DNS المطلوبة من Mailgun لأنني لا أتحكم في DNS العميل).
شكرًا لك @pfaffman! آسف على الارتباك، لقد خلطت بين شيئين في رسالتي الأصلية: 1) تثبيت Discourse لمجتمع Gitpod، و 2) أتمتة إعداد التطوير لمطوري ومساهمي Discourse. ولحسن الحظ، أنا أتبع دليل المطورين للجزء الثاني، وليس للأول.
== Seed from /workspace/discourse/db/fixtures/990_settings.rb
Discourse hostname: localhost is not a valid domain for emails!
== Seed from /workspace/discourse/db/fixtures/990_topics.rb
rake aborted!
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "polls" does not exist
LINE 8: WHERE a.attrelid = '"polls"'::regclass
^
هل فهمت اقتراحك بشكل صحيح؟ هل لديك أفكار أخرى حول كيفية إصلاحه؟ (لقد حاولت حذف الجداول مسبقًا، لكن ذلك فشل مع خطأ مختلف لا أتذكره. مستعد لمحاولة ذلك مرة أخرى.)
للعلم، يمكنك تكرار الخطأ بسهولة عن طريق محاولة فتح نسخة Discourse الخاصة بي في Gitpod: Dashboard . ستشاهد فشل إعدادي الآلي، وتحصل على بيئة تفاعلية حيث يمكن للمرء تجربة أوامر Discourse المختلفة في الطرفية (Terminal).
وعلى النقيض من رسالة الالتزام، أعتقد أن ترحيلات الإضافات كانت تعمل قبل هذا الالتزام. لم تعد تعمل الآن. لا يهم ما إذا تم توفير LOAD_PLUGINS=1 أم لا — ترحيلات الإضافات لا تعمل في بيئة التطوير الخاصة بي.
أعتقد أنني وجدت المشكلة المتعلقة بـ ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "polls" does not exist
عند تقييم load_config أثناء إنشاء قاعدة البيانات، فإنه يُعيد تعيين migrations_paths
بدأت في تصحيح الكود المتعلق بتعبئة قاعدة بيانات الاختبار، لكنني تاهت. لسبب ما، بعد تحميل المخطط، عند استدعاء db:migrate، لا يزال Rails يريد تقييم عمليات الترحيل، وحصلنا على خطأ بأن الجدول موجود بالفعل. حتى الآن، لم أستطع العثور على سبب لذلك.
(ولكن الآن، يبدو أن الأمر DISCOURSE_DEV_HOST=.gitpod.io bundle exec rails s -b 0.0.0.0 يدخل في حلقة انهيار متكرر مع الخطأ التالي:
/workspace/.rvm/gems/activesupport-6.0.0/lib/active_support/dependencies.rb:551:in `load_missing_constant': Unable to autoload constant Version, expected /workspace/discourse/lib/version.rb to define it (LoadError)
كما أن خادم الويب بدأ في حظر رابط معاينة Gitpod الخاص بي مرة أخرى: