تثبيت Discourse للتطوير باستخدام Docker

شكرًا لك على الدليل.

ومع ذلك، أواجه مشكلات في إنشاء نسخة احتياطية من قسم المسؤول.
الخطأ الذي أحصل عليه هو:
pg_dump: error: connection to database "discourse development" failed: FATAL: Peer authentication failed for user "postgres".

لقد تفحصت ملف pg_hba.conf، وقد قمت بضبط جميع الخيارات على trust.

سيكون رائعًا لو تمكنت من الحصول على مساعدة حول كيفية جعل هذا يعمل.

لقد جربت ذلك على Ubuntu وكذلك على MacOSX. كل شيء يعمل بشكل جيد على كليهما (إنشاء المنشورات، واجهة برمجة التطبيقات…) باستثناء وظيفة النسخ الاحتياطي.

شكرًا لك على هذا الحل الرائع لـ Docker.

لتشغيل مواصفات الإضافات، يعمل هذا بشكل جيد:

d/rake plugin:spec["discourse-follow"]

هل توجد طريقة لاستهداف اختبارات إضافة معينة، كما هو الحال في بيئة التطوير غير Docker؟ على سبيل المثال:

LOAD_PLUGINS=1 RAILS_ENV=test rspec plugins/discourse-follow/spec/requests/follow_controller_spec.rb:32

لقد جربت ما يلي، على سبيل المثال:

d/rspec plugins/discourse-follow/spec/lib/updater_spec.rb:10 LOAD_PLUGINS=1 RAILS_ENV=test

لكنني حصلت على خطأ.

يجب أن يسبق LOAD_PLUGINS و RAILS_ENV الأمر لتعيين متغيرات البيئة. بعد الأمر، يتم التعامل معها كحجج لـ rspec، وهو لا يفهمها.

LOAD_PLUGINS=1 RAILS_ENV=test d/rspec plugins/discourse-follow/spec/lib/updater_spec.rb:10

لا، لست مقتنعًا بأن ذلك يعمل — هل جربته فعليًا؟

أحصل على:

NameError:
  uninitialized constant Follow

أشتبه في أن السبب هو عدم تمرير متغيرات البيئة إلى عملية Docker.

ولهذا السبب كنت أجعلها معطيات.

أعتذر، لقد فسرت أوامرك الخاطئة على أنها “الأول يعمل لهذا المواصفات المحددة، والثاني لا يعمل لهذه المواصفات”. ليس لدي بيئة تطوير مُعدة للاختبار.

بالنظر إلى ملف rspec في GitHub، أعتقد أنك محق في أنه لا يتم تمرير متغيرات البيئة. يبدو أنه يجب أن تتمكن من تشغيل d/shell للحصول على shell داخل الحاوية، ثم تشغيل أمر rspec الخاص بك هناك.

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

سيمون، هذا أكثر من مجرد حل عملي ممتاز، شكرًا لك!

لقد جربته للتو وهو يعمل، أي:

my-blah-machine:~/discourse$ d/shell
discourse@discourse:/src$ LOAD_PLUGINS=1 RAILS_ENV=test rspec plugins/discourse-follow/spec/lib/updater_spec.rb:37

تمت إضافة هذا وإصدار الإضافة بالكامل إلى ويكي

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

عند النظر عن كثب إلى d/exec، الذي يستخدمه كل من d/shell و d/rspec، أعتقد أنه يمكن اختصاره أيضًا على النحو التالي:

RAILS_ENV=test d/exec LOAD_PLUGINS=1 rspec plugins/discourse-follow/spec/lib/updater_spec.rb:37

يقوم d/exec بتمرير RAILS_ENV ولكن ليس LOAD_PLUGINS، ومن هنا جاء وضعهما على جانبي d/exec.

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

هذا يعطي لي خطأ:

فشل تنفيذ OCI: فشل التنفيذ: container_linux.go:380: تسبب بدء عملية الحاوية في: exec: "LOAD_PLUGINS=1": الملف التنفيذي غير موجود في $PATH: غير معروف

آه، يبدو أنه لا يمكن استخدام متغيرات البيئة مع docker exec بهذه الطريقة. لا بأس، على الأقل فتح الـ shell أولاً يعمل.

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

أواجه نفس المشكلة تمامًا مثل ماكس. كلما حاولت عمل نسخة احتياطية أو استعادة على تثبيت دوكر المحلي للتطوير، أحصل على نفس الخطأ: فشل مصادقة النظير للمستخدم "postgres"

بعد بعض البحث، اكتشفت أنه في بيئة التطوير، يظهر تكوين قاعدة البيانات على النحو التالي:

BackupRestore.database_configuration
=> #<struct BackupRestore::DatabaseConfiguration host=nil, port=nil, username="postgres", password=nil, database="discourse_development">

بشكل ما، لا تقوم بيئة التطوير بتعيين اسم المستخدم في متغيرات البيئة، وبالتالي يقوم وحدة BackupRestore بتعيين قيمة اسم المستخدم افتراضيًا إلى postgres.

# lib/backup_restore.rb:122

    DatabaseConfiguration.new(
      config["backup_host"] || config["host"],
      config["backup_port"] || config["port"],
      config["username"] || username || ENV["USER"] || "postgres",
      config["password"] || password,
      config["database"]
    )

أين يمكننا تعيين اسم المستخدم الصحيح لقاعدة البيانات؟

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

كيف نستخدم Install the Discourse Theme CLI console app to help you build themes هنا؟

تم تثبيت الجيم بنجاح: d/exec sudo gem install discourse_theme … الآن التحدي هو إنشاء رابط رمزي للمظهر المحلي …

@Simon_Manning لاحظ استخدام sudo لتجاوز أذونات الوصول (شكرًا على التذكير @fzngagan)

أحاول اختبار إضافة باستخدام إعدادات Docker. بشكل عشوائي، يتوقف التطبيق عن التحميل وأواجه صفحة فارغة فقط حتى أحذف مجلد البيانات وأعيد بناء كل شيء. هل لديك أي نصائح حول كيفية تصحيح المشكلة؟

هل ظهرت أي نتائج بخصوص ذلك؟ لا يزال الأمر يبدو كمشكلة.

كانت “الحل البديل” غير الرسمي الخاص بي هو استبدال اسم المستخدم من postgres إلى discourse في كتلة الكود التالية:

# lib/backup_restore.rb:122

    DatabaseConfiguration.new(
      config["backup_host"] || config["host"],
      config["backup_port"] || config["port"],
      config["username"] || username || ENV["USER"] || "postgres",
      config["password"] || password,
      config["database"]
    )

انتقلت من جهاز Mac المحلي الخاص بي إلى آلة افتراضية Ubuntu على أمل أن يسهل ذلك تشغيل هذا المشروع، لكن للأسف حتى الآن لم ينجح الأمر.

أواجه بالفعل بعض مشاكل الصلاحيات الغريبة في المراحل المبكرة. يُبلغ أمر d/bundle install عن حاجته إلى صلاحيات sudo لتثبيت بعض العناصر، كما يظهر أمر d/rails s مشاكل في الصلاحيات أيضًا.

Traceback (most recent call last):
        8: from /src/bin/unicorn:70:in `<main>'
        7: from /src/bin/unicorn:38:in `ensure_cache_clean!'
        6: from /usr/local/lib/ruby/2.7.0/fileutils.rb:211:in `mkdir_p'
        5: from /usr/local/lib/ruby/2.7.0/fileutils.rb:211:in `each'
        4: from /usr/local/lib/ruby/2.7.0/fileutils.rb:226:in `block in mkdir_p'
        3: from /usr/local/lib/ruby/2.7.0/fileutils.rb:226:in `reverse_each'
        2: from /usr/local/lib/ruby/2.7.0/fileutils.rb:228:in `block (2 levels) in mkdir_p'
        1: from /usr/local/lib/ruby/2.7.0/fileutils.rb:250:in `fu_mkdir'
/usr/local/lib/ruby/2.7.0/fileutils.rb:250:in `mkdir': Permission denied @ dir_s_mkdir - /src/tmp (Errno::EACCES)

هل لديك أي فكرة عما يحدث خطأ؟ كانت هذه الآلة تعمل سابقًا على نسخة إنتاجية من Discourse دون مشاكل. لقد قمت فقط بإيقاف وإزالة تلك الحاويات، ثم استنساخت مستودع git الخاص بالتطوير إلى مجلد مختلف. أدير كل شيء عبر tmux للتعامل مع جلسات shell المختلفة.

لم أقم بالانتقال إلى M1 بعد، لكنني أتوقع أن أقوم بذلك قريبًا جدًا، وأفضل حقًا سهولة إعداد Docker.

رابط هذا الطلب (PR) يشير إلى https://github.com/docker/for-mac/issues/5321 حيث يقولون:

الحل الوحيد هو التبديل إلى صور متعددة الهندسات المعمارية تدعم arm64. ستكون هذه الصور أيضًا أسرع بكثير وأكثر موثوقية بشكل عام. أنصحك بالتحقق من الصور الأساسية التي تستخدمها والتبديل إلى صور متعددة الهندسات المعمارية حيثما أمكن. يمكنك معرفة الهندسات المعمارية المدعومة لكل صورة على Docker Hub: […]

لبناء صورة متعددة الهندسات المعمارية بنفسك، أنصحك باستخدام docker buildx، اطلع على هذه التدوينة: https://www.docker.com/blog/multi-arch-build-and-images-the-simple-way/

هل فريق Discourse منفتح لدعم صورة متعددة الهندسات المعمارية؟ يبدو أن الصورة الأساسية لـ Discourse مبنية على debian:buster-slim، وهي بالفعل متعددة الهندسات المعمارية، لذا يبدو أن جعل الصورة الأساسية لـ Discourse متعددة الهندسات المعمارية ليس بالأمر الصعب بشكل مفرط، لكن هذا قد يضعكم في موقف الحاجة إلى دعم ARM (في بيئة الإنتاج!). سيكون على شخص ما (فريق Discourse؟) تشغيل اختبارات Discourse على كل من x86_64 و ARM، وإصلاح المشكلات عند فشلها، وما إلى ذلك.

هل سيكون تقديم طلب (PR) مرحبًا به هنا؟

(برأيي، يبدو أن ARM هي هندسة المستقبل، حتى في البيئات المستضافة على السحابة.)

إعجابَين (2)

أحاول إعداد هذا على WSL2.

وصلت إلى مرحلة تشغيل ember_cli، لكن Chrome يظهر لي الخطأ التالي:

لا توجد أخطاء ظاهرة في الطرفية أو في سجل التطوير. أي اقتراحات مرحب بها، من فضلك؟

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

هذا مفيد جدًا

مرحباً بالجميع،

أواجه نفس المشاكل، لذا فكرت في طرحها كخطأ. يرجى الاطلاع أدناه.

فشل استعادة النسخ الاحتياطي في بيئة دوكر تطوير نظيفة: FATAL: فشل مصادقة النظير للمستخدم “postgres”

أخبرني إذا كان بإمكاني تقديم المزيد من المعلومات أو المساعدة.

كوين

لا يمكنني تشغيل هذا على openSUSE Leap 15. أفترض أن هذا ليس نظام تشغيل مدعومًا، على الرغم من أنه بما أننا نستخدم Docker، فلا ينبغي أن يهم حقًا…

ترحيل قاعدة البيانات...
rake aborted!
Errno::EACCES: Permission denied @ dir_s_mkdir - /src/app/assets/javascripts/plugins
/src/lib/plugin/instance.rb:441:in `ensure_directory'
/src/lib/plugin/instance.rb:713:in `activate!'
lib/discourse.rb:283:in `block in activate_plugins!'
lib/discourse.rb:280:in `each'
lib/discourse.rb:280:in `activate_plugins!'
/src/config/application.rb:318:in `block in <class:Application>'
/src/lib/plugin_initialization_guard.rb:5:in `plugin_initialization_guard'
/src/config/application.rb:317:in `<class:Application>'
/src/config/application.rb:73:in `<module:Discourse>'
/src/config/application.rb:72:in `<main>'
/src/Rakefile:7:in `<main>'
(See full trace by running task with --trace)

حاولت إنشاء “app/assets/javascripts/plugins” يدويًا وهذا قادني إلى

ترحيل قاعدة البيانات...
rake aborted!
Errno::EACCES: Permission denied @ dir_s_mkdir - /src/tmp
lib/discourse.rb:94:in `atomic_write_file'
/src/lib/plugin/instance.rb:726:in `activate!'
lib/discourse.rb:283:in `block in activate_plugins!'
lib/discourse.rb:280:in `each'
lib/discourse.rb:280:in `activate_plugins!'
/src/config/application.rb:318:in `block in <class:Application>'
/src/lib/plugin_initialization_guard.rb:5:in `plugin_initialization_guard'
/src/config/application.rb:317:in `<class:Application>'
/src/config/application.rb:73:in `<module:Discourse>'
/src/config/application.rb:72:in `<main>'
/src/Rakefile:7:in `<main>'
(See full trace by running task with --trace)

لذا سأقوم بإنشاء tmp في مجلد المصدر…

ولكن بعد ذلك يصل بي الأمر إلى هنا:

ترحيل قاعدة البيانات...
rake aborted!
Errno::EACCES: Permission denied @ rb_sysopen - /src/tmp/5ad4443faf817dc922116f8df65ae5c3
lib/discourse.rb:97:in `initialize'
lib/discourse.rb:97:in `open'
lib/discourse.rb:97:in `atomic_write_file'
/src/lib/plugin/instance.rb:726:in `activate!'
lib/discourse.rb:283:in `block in activate_plugins!'
lib/discourse.rb:280:in `each'
lib/discourse.rb:280:in `activate_plugins!'
/src/config/application.rb:318:in `block in <class:Application>'
/src/lib/plugin_initialization_guard.rb:5:in `plugin_initialization_guard'
/src/config/application.rb:317:in `<class:Application>'
/src/config/application.rb:73:in `<module:Discourse>'
/src/config/application.rb:72:in `<main>'
/src/Rakefile:7:in `<main>'
(See full trace by running task with --trace)

يبدو أن boot_dev يقوم بتشغيل docker exec كمستخدم discourse… ولكن المجلدات مملوكة لمستخدم 1016 (معرف المستخدم الخاص بي على المضيف).

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

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