هذا هو بالضبط سبب توجيهنا إلى هذا الموضوع. يتضمن الموضوع الأصلي قائمة تبدو محدثة بشكل متكرر. إذا نظرت إلى سجل التعديلات، يمكنك معرفة الإضافات التي تمت إضافتها ومتى.
لقد انتهينا في الوقت الحالي! آخر ما تبقى هو يوم الكعكة وسيتم الانتهاء منه في غضون بضعة أشهر أخرى.
لقد تعثرت وسقطت على هذا قبل فترة وجيزة. لقد بدأت في استكشاف تطوير Discourse، لذلك أردت أن أمارس سير عمل التحديث الخاص بي:
# git pull
# bundle install
# pnpm install
# ./bin/rails db:migrate
لكن تخميني هو أن إضافة Discourse AI تتطلب إضافة Pgvector لـ PostgreSQL (والتي لم أكن أعرف بوجودها من قبل):
== 20230710171141 EnablePgVectorExtension: migrating =========
-- enable_extension(:vector)
bin/rails aborted!
StandardError: An error has occurred, this and all later migrations canceled: (StandardError)
ERROR: current transaction is aborted, commands ignored until end of transaction block
/home/john/development/discourse/lib/mini_sql_multisite_connection.rb:109:in 'MiniSqlMultisiteConnection#run'
/home/john/development/discourse/plugins/discourse-ai/db/migrate/20230710171141_enable_pg_vector_extension.rb:8:in 'EnablePgVectorExtension#change'
/home/john/development/discourse/lib/freedom_patches/schema_migration_details.rb:8:in 'block in FreedomPatches::SchemaMigrationDetails#exec_migration'
/home/john/development/discourse/lib/freedom_patches/schema_migration_details.rb:8:in 'FreedomPatches::SchemaMigrationDetails#exec_migration'
/home/john/development/discourse/lib/migration/safe_migrate.rb:28:in 'Migration::SafeMigrate::SafeMigration#migrate'
/home/john/development/discourse/lib/migration/safe_migrate.rb:53:in 'Migration::SafeMigrate::NiceErrors#migrate'
/home/john/development/discourse/lib/tasks/db.rake:267:in 'block (2 levels) in <main>'
/home/john/development/discourse/lib/distributed_mutex.rb:53:in 'block in DistributedMutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:49:in 'Thread::Mutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:49:in 'DistributedMutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:34:in 'DistributedMutex.synchronize'
/home/john/development/discourse/lib/tasks/db.rake:242:in 'block in <main>'
Caused by:
PG::InFailedSqlTransaction: ERROR: current transaction is aborted, commands ignored until end of transaction block (PG::InFailedSqlTransaction)
/home/john/development/discourse/lib/mini_sql_multisite_connection.rb:109:in 'MiniSqlMultisiteConnection#run'
/home/john/development/discourse/plugins/discourse-ai/db/migrate/20230710171141_enable_pg_vector_extension.rb:8:in 'EnablePgVectorExtension#change'
/home/john/development/discourse/lib/freedom_patches/schema_migration_details.rb:8:in 'block in FreedomPatches::SchemaMigrationDetails#exec_migration'
/home/john/development/discourse/lib/freedom_patches/schema_migration_details.rb:8:in 'FreedomPatches::SchemaMigrationDetails#exec_migration'
/home/john/development/discourse/lib/migration/safe_migrate.rb:28:in 'Migration::SafeMigrate::SafeMigration#migrate'
/home/john/development/discourse/lib/migration/safe_migrate.rb:53:in 'Migration::SafeMigrate::NiceErrors#migrate'
/home/john/development/discourse/lib/tasks/db.rake:267:in 'block (2 levels) in <main>'
/home/john/development/discourse/lib/distributed_mutex.rb:53:in 'block in DistributedMutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:49:in 'Thread::Mutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:49:in 'DistributedMutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:34:in 'DistributedMutex.synchronize'
/home/john/development/discourse/lib/tasks/db.rake:242:in 'block in <main>'
Caused by:
ActiveRecord::StatementInvalid: PG::FeatureNotSupported: ERROR: extension "vector" is not available (ActiveRecord::StatementInvalid)
DETAIL: Could not open extension control file "/usr/share/postgresql/extension/vector.control": No such file or directory.
HINT: The extension must first be installed on the system where PostgreSQL is running.
/home/john/development/discourse/plugins/discourse-ai/db/migrate/20230710171141_enable_pg_vector_extension.rb:6:in 'EnablePgVectorExtension#change'
/home/john/development/discourse/lib/freedom_patches/schema_migration_details.rb:8:in 'block in FreedomPatches::SchemaMigrationDetails#exec_migration'
/home/john/development/discourse/lib/freedom_patches/schema_migration_details.rb:8:in 'FreedomPatches::SchemaMigrationDetails#exec_migration'
/home/john/development/discourse/lib/migration/safe_migrate.rb:28:in 'Migration::SafeMigrate::SafeMigration#migrate'
/home/john/development/discourse/lib/migration/safe_migrate.rb:53:in 'Migration::SafeMigrate::NiceErrors#migrate'
/home/john/development/discourse/lib/tasks/db.rake:267:in 'block (2 levels) in <main>'
/home/john/development/discourse/lib/distributed_mutex.rb:53:in 'block in DistributedMutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:49:in 'Thread::Mutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:49:in 'DistributedMutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:34:in 'DistributedMutex.synchronize'
/home/john/development/discourse/lib/tasks/db.rake:242:in 'block in <main>'
Caused by:
PG::FeatureNotSupported: ERROR: extension "vector" is not available (PG::FeatureNotSupported)
DETAIL: Could not open extension control file "/usr/share/postgresql/extension/vector.control": No such file or directory.
HINT: The extension must first be installed on the system where PostgreSQL is running.
/home/john/development/discourse/plugins/discourse-ai/db/migrate/20230710171141_enable_pg_vector_extension.rb:6:in 'EnablePgVectorExtension#change'
/home/john/development/discourse/lib/freedom_patches/schema_migration_details.rb:8:in 'block in FreedomPatches::SchemaMigrationDetails#exec_migration'
/home/john/development/discourse/lib/freedom_patches/schema_migration_details.rb:8:in 'FreedomPatches::SchemaMigrationDetails#exec_migration'
/home/john/development/discourse/lib/migration/safe_migrate.rb:28:in 'Migration::SafeMigrate::SafeMigration#migrate'
/home/john/development/discourse/lib/migration/safe_migrate.rb:53:in 'Migration::SafeMigrate::NiceErrors#migrate'
/home/john/development/discourse/lib/tasks/db.rake:267:in 'block (2 levels) in <main>'
/home/john/development/discourse/lib/distributed_mutex.rb:53:in 'block in DistributedMutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:49:in 'Thread::Mutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:49:in 'DistributedMutex#synchronize'
/home/john/development/discourse/lib/distributed_mutex.rb:34:in 'DistributedMutex.synchronize'
/home/john/development/discourse/lib/tasks/db.rake:242:in 'block in <main>'
Tasks: TOP => db:migrate
يمكنني تثبيت ذلك، لكنني أتساءل عما إذا كانت هناك طريقة لتعطيل الإضافات على هذا المستوى حتى يتم تخطي عمليات الترحيل الخاصة بها. (أفضل عدم تثبيت برامج إضافية، خاصةً “إضافة” لست مهتمًا باستكشافها للتطوير.)
لقد واجهت هذا أيضًا في وقت سابق اليوم. قمت بتثبيت الحزمة عبر sudo، بعد بعض المساعدة من ChatGPT. أتساءل أيضًا عن هذا؛ أتساءل - ربما سيساعد حذف مجلد المكون الإضافي من الدليل /plugins
… ولكن قد يعيد git pull تثبيته لاحقًا.
أنا أعارض هذا التغيير. عادةً في تطوير البرمجيات، يعني وجود نواة نحيفة أن التوزيع الرئيسي يمكن أن يكون أصغر وأسرع وأقل عرضة للهجمات. أدت تجربتي الأخيرة مع الإضافات إلى رؤية أنه من الممكن تقنيًا تشغيل كود الإضافة حتى أثناء تعطيلها، حيث يبدو أن هذا يعتمد على مؤلف الإضافة للتحقق، لذلك يبدو أن هذا يزيد المخاطر والضخامة بشكل كبير.
المشكلة الأكثر إلحاحًا هي أنه لا يبدو أن أي تعليمات قد تم تحديثها في دليل التثبيت (ربما فاتني فقط؟). ليس من الواضح ما نحتاج إلى تثبيته لجعل الأمور تعمل مرة أخرى. لقد قمت بحل بعض الأخطاء عن طريق تثبيت حزمة أوبونتو postgresql-16-pgvector ولكن لا يزال لدي بعض أخطاء المتجهات عند تشغيل db:migrate. تمكنت من تجاوزها عن طريق حذف إضافة الذكاء الاصطناعي محليًا.
على أي حال، هذا الكثير من التعليمات البرمجية الإضافية، والعديد من هذه الإضافات غير ذات صلة تمامًا بحالات الاستخدام لمعظم مجتمعات Discourse. (هذا لا يعني أن هذه إضافات سيئة! أنا متأكد من أنها مفيدة جدًا للمجتمعات التي تحتاجها. فقط أجد صعوبة في رؤية أن كل منتدى مجتمعي يحتاج إلى الشحن مع تكامل Zendesk، وما إلى ذلك). إضافة الذكاء الاصطناعي على وجه الخصوص نظرًا لمتطلباتها الإضافية التي تعطل الأشياء يجب أن يتم التخلص منها بالتأكيد في رأيي.
على المستوى الشخصي، عندما أسجل الدخول إلى لوحة الإدارة الخاصة بي وأرى فجأة مجموعة من إضافات الإعلانات، حتى لو كان الكود يجب أن يكون خاملًا، فإن ذلك يجعلني قلقًا للغاية. أرغب، بأقوى العبارات الممكنة، في التعبير عن أنني لا أريد أي إضافات إعلانية من شركات التكنولوجيا الكبرى على تثبيتي افتراضيًا، حتى لو كانت معطلة. هذه صناعة كانت مسيئة بشكل لا يصدق تاريخيًا تجاه خصوصية المستخدم، و Discourse لا يساعد نفسه عن طريق شحن مثل هذه التكاملات افتراضيًا. الأشخاص الذين يريدون الإعلانات لن يواجهوا صعوبة في العثور على الإضافة المطلوبة، وليس من الضروري تضمينها في جميع عمليات التثبيت.
باختصار: يرجى إعادة النظر في هذا التغيير. ![]()
تقوم Discourse بدمج الإضافات في النواة التي يتم تقديمها دائمًا في استضافاتها الرسمية
أتفق على أن هذا يجلب عبئًا إضافيًا في واجهة المسؤول، مع الكثير من أسماء العلامات التجارية التي تُحسب على أنها إعلانات لعقلي. هذا ليس رائعًا. بصفتي مدافعًا عن البرمجيات الحرة أحاول جاهدًا تجنب العلامات التجارية الكبيرة، أعتقد أنه يتخذ خطوة اتخذتها أوبونتو قبل بضع سنوات قبل أن يتم استعمارها بالكامل من قبل أمازون وجوجل وشركات مماثلة. إذا سمحت لتلك الأشياء بالوصول إلى عينيك، فسوف تبتلعها في النهاية.
تضمين الإضافات في النواة يمنح المطورين أيضًا فرصة لتحويل وظيفة المكون الإضافي عن طريق الخطأ إلى متطلب بمرور الوقت، بينما يضمن بقاؤها كمكونات إضافية عدم ارتكاب هذا النوع من الأخطاء.
هل يمكن للفريق توضيح الأساس المنطقي وراء هذا التغيير؟
إذا كان الأمر يتعلق بتسريع عمليات التثبيت على البنية التحتية لـ Discourse، فربما يمكن لإنشاء حزمة discourse-hosting-bundle يتم إنشاؤها تلقائيًا في CI تحقيق نفس النتيجة؟
@david، هل يمكنك الحفاظ على الترتيب الأبجدي في قائمة المكونات الإضافية المتأثرة؟
الدافع هنا هو توفير تجربة أكثر سلاسة للمستخدمين لأول مرة في Discourse، بحيث يحصلون على تجربة Discourse “كاملة الميزات” فورًا.
دافع آخر هو تجربة المطور لفريقنا، وللمساهمين في المجتمع. من خلال تجميع كل هذه الإضافات مع النواة الأساسية، لم تعد هناك حاجة للنظر في التوافق مع إصدارات النواة المختلفة. هذا مفيد بشكل خاص للإضافات مثل discourse-ai التي يتم تطويرها بشكل مكثف حاليًا، بالتوازي مع التغييرات الأساسية ذات الصلة.
إضافات المصادقة ذات العلامات التجارية هي الأكثر احتمالاً ليتم دمجها في النواة الأساسية، تمامًا مثل طرق المصادقة الأساسية الحالية لدينا مثل Google/Facebook/etc. لذلك هناك فرصة جيدة لإزالتها من القائمة في المستقبل القريب.
هذا التغيير لا يتعلق بالأداء على استضافتنا. كان لدينا بالفعل توزيع مُعد مسبقًا مع كل هذه الإضافات، وأكثر من ذلك، كما وصفت. ![]()
لقد قمت بتصحيح الترتيب ![]()
لقد تم الرد عليه بالفعل في المنشور الأصلي:
بعض الأمثلة على ذلك:
- لا داعي للقلق بشأن الإصدارات إذا أضفنا شيئًا في النواة لمكون إضافي، ونحن نعلم أن كلاهما بنفس الإصدار
- يسهل اختبار مكون إضافي يعتمد على مكون إضافي آخر إذا كان الكود موجودًا لكليهما
- عندما نغير شيئًا في النواة، غالبًا ما نحتاج إلى تقديم طلبات سحب متعددة فقط لإصلاح المواصفات في المكونات الإضافية، والآن يعني ذلك طلب سحب واحد مستقل
- النتيجة النهائية هي توفر المزيد من الوقت لفريق Discourse لتحسين المنتج وصيانته بدلاً من التعامل مع هذه الأنواع من المشكلات، لذا في النهاية، أنت أيضًا المستفيد.
أود بشدة أن تختفي هذه من واجهة المستخدم الخاصة بي، لكنها تشغل مساحة فقط، لأنها ليست اختيارية ولا مخفية: إنها جزء أساسي. هذا هو بالضبط سبب قلقنا.
فيما يتعلق بتجربة المستخدم لأول مرة، ربما يمكن تغيير قالب الحاوية لتضمين وتوثيق الحزمة الرسمية:
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
# المكون الإضافي docker_manager إلزامي للتحديثات الآلية المستندة إلى الويب
- git clone https://github.com/discourse/docker_manager.git
# يتم تثبيت المكونات الإضافية التالية على جميع المثيلات المستضافة من Discourse.
# قم بإلغاء التعليق على السطر عن طريق إزالة `#` قبل سطر `- git clone` لتمكينها.
# انظر https://meta.discourse.org/t/bundling-more-popular-plugins-with-discourse-core/373574/
# مكون Discourse الإعلاني (إعلانات): https://meta.discourse.org/t/discourse-advertising-plugin-ads/33734
#- git clone https://github.com/discourse/discourse-adplugin
# التسويق بالعمولة من Discourse
#- git clone https://github.com/discourse/discourse-affiliate
# ...
# ...
# يرجى إضافة مكونات إضافية أخرى أدناه. للحصول على قائمة بالمكونات الإضافية الرسمية، انظر:
# https://meta.discourse.org/tag/official
# لجميع المكونات الإضافية المتاحة، انظر:
# https://meta.discourse.org/c/plugin/22
فيما يتعلق بتجربة المطور، بالتأكيد يمكنك أتمتة تمرير إصدارات المكونات الإضافية بطريقة أخرى أقل تدخلاً. على سبيل المثال، باستخدام قاعدة pups لإلغاء التعليق على المكونات الإضافية باستخدام استراتيجية التوثيق المذكورة أعلاه.
يمكنك حتى الحصول على قالب حاوية يقوم بذلك نيابة عنك:
templates:
- "templates/discourse.hosting.yml"
- "templates/discourse.core-bundle.yml"
لاحظ أن انطباعي الأول كان جيدًا: لقد اكتشفت عددًا قليلاً من المكونات الإضافية المثيرة للاهتمام التي لم تكن تحت راداري بعد. ولكن نعم، بما أنني رأيتك تقوم بالتحسين والبحث عن أقل قاسم مشترك على مدى العقد الماضي، فأنا متفاجئ من أن هذه هي الطريقة التي ستتعامل بها مع مثل هذا الاقتراح.
أعتقد أنه يمكنك إضافة rm - rf discourse-ai حيث توجد عادةً أوامر git clone. لم أقم بذلك بنفسي.
نعم تقنياً يمكنك إزالة جميع المجلدات في دليل الإضافات وسيظل نظام Discourse الأساسي يعمل
من المحتمل أن تتبع هذه المكونات الإضافية التي طورها فريق discourse القواعد وتضيف الحد الأدنى من الحمل الزائد. وجودها جميعًا يسهل رؤية أنها تعمل معًا وتشارك نفس المتطلبات.
هل تقوم بتشغيل قاعدة بيانات postgres خارجية بدلاً من المضمنة؟ هل تقوم بتشغيل إعداد حاويتين لم يتم تحديثه منذ فترة طويلة؟
يمكنك محاولة إزالتها، ولكن لا يمكنها فعل أي شيء ما لم تقم بإنشاء حساب مع الشركات الشريرة والحصول على مفاتيح للسماح بتتبع البدء.
شكراً لردك،
نأمل ذلك، ولكنه هو مساحة إضافية للأخطاء والهجمات، مقابل عدم وجود فائدة للمجتمعات التي لا تستخدم هذه الإضافات (وهو ما سيكون عليه معظم المجتمعات).
أشعر أن Discourse حددت مشكلة حقيقية هنا ولكنها توصلت إلى الحل الخاطئ.
أتفق تمامًا على وجود مشكلة جذرية حقيقية تتمثل في هشاشة النظام البيئي للتطوير/الإضافات لـ Discourse. من الصعب بالتأكيد التطوير ضد هدف متحرك، وتغيرات واجهة برمجة التطبيقات في النواة تجعل ذلك صعبًا بالتأكيد. إلى حد ما، هذا جزء من التطوير ضد أحدث ما توصلت إليه التكنولوجيا، ولكن هذا هو السبب بالضبط الذي يجعل هذا السلوك الافتراضي غير مرغوب فيه. وجود عدد قليل من الإضافات البسيطة يمكنني فهم مشكلتك والتعاطف معها (وهي أكبر بكثير من نطاق مشكلتي).
ومع ذلك، فإن ما تفعله Discourse هنا هو مجرد تأجيل المشكلة. قد يحل المشكلة لـ Discourse، ولكنه لا يحلها لبقية مطوري الإضافات. يمر الآخرون بنفس الألم، ولكن على نطاق أصغر.
سيكون الحل الأفضل هو وجود سلسلة دعم طويل الأمد (LTS) أكثر قوة يمكن تطويرها. أعلم أنه تمت مناقشة هذا في مكان آخر لذلك لن أعيد تكراره، ولكن أحد أكبر التحديات للمجتمعات ومطوري الإضافات وحتى موظفي Discourse هو عدم وجود LTS. يتم التوصية بشدة بعدم استخدام الفرع المستقر. إذا تم استخدام خط أنابيب تطوير أكثر تقليدية، فسيكون الأمر أسهل بكثير لتطوير الإضافات. يمكننا أن نعرف الأوقات التي ستتعطل فيها الأشياء (ترقيات الإصدار الرئيسية)، والتخطيط لذلك. بخلاف ذلك، يمكننا أن نكون واثقين من أن الترقيات الصغيرة لن تعطل منتدياتنا بشكل عشوائي. (هذه ربما تكون واحدة من أكبر مشاكل Discourse في رأيي، وواحدة رأيتها تُثار في أماكن أخرى عندما يناقش الأشخاص خيارات المنتديات. التقلب هو عيب حقيقي.)
نعم - وفقًا للرابط، واجهت هذا في بيئة تطوير لن تكون قائمة على الحاويات. (لم أجرب هذا في حاويات الإنتاج بعد)
أعتقد أن هذا هو أحد الأشياء التي أقلق بشأنها، وهو ما إذا كان المسار “القياسي” يفترض وجود هذه الإضافات، فقد أواجه أخطاء لأن الجميع يقبلون إضافات الإعلانات. يجب علي إما المخاطرة بظهور أخطاء غير متوقعة، أو التعامل مع عبء إضافي للإضافات. هدفي هو تحقيق أقصى قدر ممكن من الاستقرار لتطبيقاتي.
تجدر الإشارة أيضًا إلى أن نواة Discourse نفسها ثقيلة جدًا من حيث استهلاك الموارد مقارنة بالمنتديات الأخرى. أعتقد أنه من المفيد محاولة الحفاظ على خفة النواة حتى لا تؤدي إلى تفاقم مشاكل الأداء.
لم أراجع هذه بعد للتأكد من أنها لا تسحب تتبع / إرسال تقارير إلى المنزل عبر جافاسكريبت أثناء تعطيلها، ولكن حتى ذلك الحين سأفترض أنك على حق. آمل أن يتحقق شخص ما من ذلك، لأنه سيكون كارثة كبيرة إذا ثبت أن هذا غير صحيح.
أعتقد أن نقطة Hellekin حول الفوضى صحيحة، وأعتقد أيضًا أن ما يشيرون إليه بإضافة إعلانات التكنولوجيا الكبيرة لن يُقابل بشكل جيد من قبل البعض في مجتمع المصادر المفتوحة - النوع الذي من المرجح أن يستخدم منتديات المصادر المفتوحة في المقام الأول.
على أي حال، أود أيضًا أن أقول إنني أقدر استماعك إلى ملاحظاتي، حتى لو لم يكن الأمر سهلاً ![]()
أعتقد أنه من الصعب معرفة أي منها تم تدقيقه لغويًا من قبل وأيها لم يتم.
تساءلت لفترة وجيزة عما إذا كنت قد تحققت مسبقًا لمعرفة ما إذا كانت هناك أي تعليقات مفتوحة مفقودة الآن، حيث تمت إضافة النصوص فقط ولم يتم إضافة جميع البيانات من Crowdin. لكنني أفترض أنني لا أريد حتى معرفة الإجابة على هذا السؤال. في النهاية، لا فرق سواء لم يستجب أحد لعدة أشهر أو اختفت ببساطة أسئلة وتعليقات المترجمين.
هل هناك اختبارات لعدم وجود آثار جانبية عند إزالة أدلة المكونات الإضافية مع الحزمة الجديدة، لضمان عدم تحول المكون الإضافي عن طريق الخطأ إلى متطلب؟
مجموعة الاختبار الأساسية لدينا تعمل دون تحميل أي إضافات، لذا نعم، يجب اكتشاف أي تبعية من الأساس → الإضافات بواسطة نظام CI.
لقد علقت الأسطر الخاصة باستنساخ الإضافات ولكن عند تشغيل “launcher rebuild app” مرة أخرى أحصل على نفس الرسائل:
FAILED
--------------------
Pups::ExecError: cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 546 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/exec_command.rb:131:in `spawn'
exec failed with the params {"cd"=>"$home", "tag"=>"migrate", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrap failed with exit code 1
---
HINT: The plugin 'discourse-reactions' is now bundled with Discourse and should not be included in your container configuration.
Remove the line 'git clone https://github.com/discourse/discourse-reactions' from your containers/app.yml file, then try again.
For more information, see https://meta.discourse.org/t/373574
---
---
HINT: The plugin 'discourse-data-explorer' is now bundled with Discourse and should not be included in your container configuration.
Remove the line 'git clone https://github.com/discourse/discourse-data-explorer' from your containers/app.yml file, then try again.
For more information, see https://meta.discourse.org/t/373574
---
---
HINT: The plugin 'discourse-solved' is now bundled with Discourse and should not be included in your container configuration.
Remove the line 'git clone https://github.com/discourse/discourse-solved' from your containers/app.yml file, then try again.
For more information, see https://meta.discourse.org/t/373574
---
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
سبب الفشل موجود فوق سطر FAILED.