مرحبًا من Gitpod! (التثبيت على Google Cloud وإعداد التطوير الآلي)

مرحبًا يا مجتمع Discourse! :wave:

أعمل في 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

شكرًا على ردودكم @marianord و @david!

هذا يبدو أكثر منطقية من استخدام Cloud Run، حيث قد يستغرق استخراج جميع حالات حاويات Discourse بعض الوقت. شكرًا لتوجيهي إلى الدليل! سأحاول اتباعه لإعداد مثيل Compute، وسأعود للإبلاغ هنا عن نتائجي.

أنا أتبع https://github.com/discourse/discourse/blob/master/docs/DEVELOPER-ADVANCED.md.

الخطأ المحدد الذي رأيته كان:

== 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
                            ^

أثناء محاولة:

bundle exec rake db:create db:migrate &&
RAILS_ENV=test bundle exec rake db:create db:migrate

لقد جربت أيضًا إضافة هذا السطر:

RAILS_ENV=development bundle exec rake db:create db:migrate

لكن دون جدوى.

شكرًا جزيلاً على النصيحة! سأجرب ذلك، وسأعود للإبلاغ هنا أيضًا. (عذرًا عن طرح سؤالين في مرة واحدة! آمل ألا يجعل هذا النقاش مربكًا جدًا.)

تثبيت المطور أبطأ بكثير ومصمم من أجل… التطوير. لذا ستحتاج إلى اتباع تعليمات التثبيت القياسية. من السهل أتمتتها. خدمة التثبيت الخاصة بي مؤتمتة بالكامل الآن (باستثناء إعدادات DNS المطلوبة من Mailgun لأنني لا أتحكم في DNS العميل).

الجزء الصعب في التثبيت هو إعداد البريد.

أيضًا، التثبيت والصيانة أمران مختلفان.

شكرًا لك @pfaffman! آسف على الارتباك، لقد خلطت بين شيئين في رسالتي الأصلية: 1) تثبيت Discourse لمجتمع Gitpod، و 2) أتمتة إعداد التطوير لمطوري ومساهمي Discourse. ولحسن الحظ، أنا أتبع دليل المطورين للجزء الثاني، وليس للأول. :sweat_smile:

@david Hmm، للأسف، مع:

bundle exec rake db:create db:migrate &&
RAILS_ENV=test LOAD_PLUGINS=1 bundle exec rake db:create db:migrate

لا يزال الفشل يحدث مع:

== 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
                            ^

هل فهمت اقتراحك بشكل صحيح؟ هل لديك أفكار أخرى حول كيفية إصلاحه؟ (لقد حاولت حذف الجداول مسبقًا، لكن ذلك فشل مع خطأ مختلف لا أتذكره. مستعد لمحاولة ذلك مرة أخرى.)

أيضًا، نسيت أن أذكر أن تعليمات الإعداد الخاصة بي كانت تعمل حتى الأسبوع الماضي تقريبًا، لذا ظهر الخطأ مؤخرًا بعد إعادة تفرع (rebase) لـ Discourse. أعتقد أن ذلك بعد الترحيل إلى Rails 6 ربما؟ DEV: Upgrade Discourse to Rails 6 (#8083) · discourse/discourse@32b8a2c · GitHub

للعلم، يمكنك تكرار الخطأ بسهولة عن طريق محاولة فتح نسخة Discourse الخاصة بي في Gitpod: Dashboard . ستشاهد فشل إعدادي الآلي، وتحصل على بيئة تفاعلية حيث يمكن للمرء تجربة أوامر Discourse المختلفة في الطرفية (Terminal).

@سام يبدو أن FIX: Rails 6 multisite migrations and plugin migrations · discourse/discourse@025d4ee · GitHub أحدث خللًا.

وعلى النقيض من رسالة الالتزام، أعتقد أن ترحيلات الإضافات كانت تعمل قبل هذا الالتزام. لم تعد تعمل الآن. لا يهم ما إذا تم توفير LOAD_PLUGINS=1 أم لا — ترحيلات الإضافات لا تعمل في بيئة التطوير الخاصة بي.

أعتقد أن السبب هو هذا:

--- a/lib/plugin/instance.rb
+++ b/lib/plugin/instance.rb
@@ -516,7 +516,7 @@ class Plugin::Instance
     Rake.add_rakelib(File.dirname(path) + "/lib/tasks")
 
     # Automatically include migrations
-    migration_paths = Rails.configuration.paths["db/migrate"]
+    migration_paths = ActiveRecord::Migrator.migrations_paths
     migration_paths << File.dirname(path) + "/db/migrate"
 
     unless Discourse.skip_post_deployment_migrations?

إذن هذا هو INSTALL-cloud.

تخيل أن هناك حاوية Docker مرفقة مع Discourse ويمكنك استخدامها مباشرة دون الحاجة إلى تثبيت أي شيء.

لقد واجهت هذه الخطأ أثناء الترحيل في موقع متعدد، وفي قاعدة بيانات التطوير/الاختبار كل شيء على ما يرام، وسأقوم بفحصها بعناية اليوم

لـ:

يجب أن يجعل هذا بيئات التطوير تعمل بشكل صحيح عند اتباع الأدلة.

@kris.kotlarek هل يمكنك إلقاء نظرة على هذا الالتزام … لماذا توقف عمل تفريغ المخطط → التحميل في Rails 6 مع إضافاتنا؟

بالتأكيد، سأتحقق منها الليلة

أعتقد أنني وجدت المشكلة المتعلقة بـ ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "polls" does not exist
عند تقييم load_config أثناء إنشاء قاعدة البيانات، فإنه يُعيد تعيين migrations_paths

إذن، هذا ما يحدث عندما نحاول تقييم db:create و db:migrate في نفس الوقت:

ومع ذلك، إذا قمنا بتشغيلهما بشكل منفصل، فإن المسارات تكون صحيحة:

أعتقد أن لدينا خيارين هنا:

  1. تعديل الأدلة والتوصية باستخدام الأمرين بشكل منفصل
  2. تطبيق رقعة “مونكي باتش” واستخدام ||=

ما رأيك؟

هل سيحل ذلك المشكلة؟

RAILS_ENV=test bin/rake db:migrate
RAILS_ENV=test bin/rake db:schema:dump
dropdb discourse_test
createdb discourse_test
RAILS_ENV=test bin/rake db:schema:load
RAILS_ENV=test bin/rake db:migrate

سيحل هذا المشكلة الأصلية المتعلقة بجدول polls المفقود المذكور هنا: Hello from Gitpod! (installing on google cloud + automated dev setup) - #4 by jankeromnes
نفس المشكلة ذُكرت في ذلك الموضوع: Install Discourse on Ubuntu or Debian for Development - #320

بدأت في تصحيح الكود المتعلق بتعبئة قاعدة بيانات الاختبار، لكنني تاهت. لسبب ما، بعد تحميل المخطط، عند استدعاء db:migrate، لا يزال Rails يريد تقييم عمليات الترحيل، وحصلنا على خطأ بأن الجدول موجود بالفعل. حتى الآن، لم أستطع العثور على سبب لذلك.

أرى، دعنا نعدّل الأدلة إذن مؤقتًا للمشرف

شكرًا جزيلاً لاهتمامك بهذا الخطأ! :+1: سأستخدم التعليمات المحدثة لتجاوز المشكلة مؤقتًا.

آه، مثير للاهتمام، شكرًا لك! سأراجع ملفات Docker الحالية للتطوير لأرى ما إذا كان يمكن تشغيلها بنقرة واحدة عبر Gitpod. :smile: سيكون ذلك رائعًا.

من المثير للاهتمام، أن تقسيم الأمرين db:create و db:migrate إلى أمرين منفصلين، كما هو مقترح في Install Discourse on Ubuntu or Debian for Development - #321 قد “نجح” أيضًا.

(ولكن الآن، يبدو أن الأمر 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 الخاص بي مرة أخرى:

Blocked host: 3000-a8a71720-4c30-466b-aea5-5344c97c4e94.ws-eu0.gitpod.io

)

لقد أنشأت طلب سحب يحتوي على إصلاح لتلك المشكلة: FIX: Remove Versions from Active Record warm up by KrisKotlarek · Pull Request #8105 · discourse/discourse · GitHub

هل يمكنك التحقق مما إذا كان ذلك يحل المشكلة على جهازك؟ (إنه يعمل الآن على جهازي المحلي)

لقد قمت للتو بتغيير متغير البيئة هذا بإضافة حرف s في النهاية

https://review.discourse.org/t/dev-support-multiple-hosts-in-dev/5713

مرحبًا جان، إذا كان لديك وقت، فأنا مهتم بمعرفة ما هي المشكلات التي واجهتها أو الأمور التي لم تسر كما كنت تتوقع مع Spectrum؟

لقد كنت أتابع Spectrum قليلاً، وأقرأ عنها بين الحين والآخر.

(حاولت إرسال رسالة خاصة لك بخصوص هذا الأمر، لكن لسبب ما، عندما أضغط على ملفك الشخصي، لا يوجد زر لإرسال رسالة خاصة.)