Install Discourse for development using Docker

أعتقد أن هذا يجب أن يكون d/rake admin:create

للأسف لا :frowning:
OCI runtime exec failed: exec failed: unable to start container process: exec: "bin/rake": stat bin/rake: no such file or directory: unknown

ما هي نتيجة: d/boot_dev --init؟

استخدام المصدر في: /home/martyn/discourse
استخدام البيانات في: /home/martyn/discourse/data/postgres
الإصدار: سحب من discourse/discourse_dev
الهضم: sha256:b64199f510bd9831af81ba8268bef3beff2abb45d0a264a0e29b35cfc3986f05
الحالة: الصورة محدثة لـ discourse/discourse_dev:release
docker.io/discourse/discourse_dev:release
docker: استجابة خطأ من الخادم: تعارض. اسم الحاوية "/discourse_dev" قيد الاستخدام بالفعل بواسطة الحاوية "44c83548a9a9060716aa7d4fd803e239227f48375625f1d27da19b3d4162c56a". يجب عليك إزالة (أو إعادة تسمية) تلك الحاوية لتتمكن من إعادة استخدام هذا الاسم.
انظر 'docker run --help'.

حسنًا، لقد قمت ببناء الحاوية.

هذا غريب جدًا. لقد قمت للتو بالتثبيت في WSL من الصفر وعمل معي، على الرغم من أنني احتجت إلى تشغيل d/exec yarn يدويًا.

أقترح إيقاف الحاوية وحذفها والبدء من جديد والانتباه إلى الأخطاء التي تظهر في وحدة التحكم.

إعجابَين (2)

لقد كنت أعمل على إعداد بيئة تطوير Discourse باستخدام تعليمات Docker، وأواجه أخطاء عند تشغيل أي من أوامر Yarn. أوامر Ruby تعمل بشكل جيد، ولكن تشغيل d/yarn (وأي من أوامرها الفرعية) يفشل مع هذا الخطأ:

discoursec(v3.1.3) $ d/exec yarn -v

<--- Last few GCs --->


<--- JS stacktrace --->

#
# خطأ فادح في تخصيص MemoryChunk في OOM أثناء إلغاء التسلسل.
#

أنا أستخدم Fedora 39 مع Docker 24.0.7. لم أقم بتعديل أي شيء سوى سحب Discourse من Git والتغيير إلى علامة v3.1.3.

هل رأى أي شخص هذا الخطأ من قبل؟ شكراً!

يبدو أنه ينفد من الذاكرة:

كم يمتلك من ذاكرة الوصول العشوائي (RAM)؟

جهازي يحتوي على 64 جيجابايت من ذاكرة الوصول العشوائي (RAM)، ولا أعتقد أنني قمت بتعيين أي حدود لاستخدام Docker للذاكرة. لدي تثبيت Docker قياسي قيد التشغيل.


تعديل: من المثير للاهتمام، أن أوامر Node تعمل ولكن Yarn تفشل:

discourse(v3.1.3*) $ d/exec node -v
v18.17.1
discourse(v3.1.3*) $ d/exec yarn -v


<--- Last few GCs --->


<--- JS stacktrace --->


#
# Fatal javascript OOM in MemoryChunk allocation failed during deserialization.
#

تحديث سريع: أوامر Node تفشل أيضًا عند إجراء المزيد من الاختبارات:

discourse(v3.1.3*) $ d/exec node --help

<--- Last few GCs --->


<--- JS stacktrace --->


#
# Fatal javascript OOM in MemoryChunk allocation failed during deserialization.
#

أي شيء آخر غير d/exec node -v يرمي هذا الخطأ. :thinking: سأواصل التحقيق ومحاولة معرفة ما إذا كان بإمكاني إيجاد حل.

لقد توصلت إلى حل لمشكلتي. إنها عملية معقدة وحل بديل، لكنها تعمل. باختصار، ترقية Node.js إلى الإصدار 20.x.x حل مشكلتي.

لقد أنشأت صورة Docker تستخدم Node.js v20.x.x بدلاً من v18.x.x الافتراضي الذي تستخدمه صورة Discourse dev Docker.

بدأت بإنشاء Dockerfile هذا:

# الاسم: discourse_node20
FROM discourse/discourse_dev:release

# ترقية node إلى LTS 20.x.x
ENV NODE_MAJOR=20
RUN apt-get update
RUN apt-get install -y ca-certificates curl gnupg
RUN mkdir -p /etc/apt/keyrings
RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
RUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list
RUN apt-get update
RUN apt-get install nodejs -y

ثم قمت ببناء الصورة: docker build -t discourse_node20 - < Dockerfile

ثم قمت بتحديث أمر docker run في d/boot_dev لاستخدام صورة discourse_node20 و عدم سحب discourse/discourse_dev:release لأنه لا يتم استخدامه. إليك هذا الأمر المحدث في d/boot_dev:

# علّق السطر أدناه
# docker pull discourse/discourse_dev:release
docker run \
    -d \
    -p $local_publish:8025:8025 \
    -p $local_publish:3000:3000 \
    -p $local_publish:4200:4200 \
    -p $local_publish:9292:9292 \
    -p $local_publish:9405:9405 \
    -v "$DATA_DIR:/shared/postgres_data:delegated" \
    -v "$SOURCE_DIR:/src:delegated" \
    -e UNICORN_BIND_ALL=true \
    -e NODE_OPTIONS=--max_old_space_size=8192 \
    $mount_plugin_symlinks \
    $ENV_ARGS \
    --hostname=discourse \
    --name=discourse_dev \
    --restart=always \
    discourse_node20 /sbin/boot

من هناك تمكنت من تشغيل d/boot_dev --init و d/rails s و d/ember-cli بنجاح، مما وفر لي بيئة تطوير عاملة في Docker 24 و Fedora 39.


لا أعرف لماذا يقوم Node 20.x.x بإصلاح المشكلة. آمل أن يتم إصلاح هذا في الصورة الرئيسية للتطوير. سأكون سعيدًا بالمساهمة بطلب سحب، ولكن ترقية تبعية رئيسية تبدو شيئًا يتجاوز مجرد طلب سحب سريع مني. :smile_cat: حسنًا، على الأقل أنا غير عالق الآن!

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

أتلقى:

تحذير: المنصة المطلوبة للصورة (linux/amd64) لا تتطابق مع منصة المضيف المكتشفة (linux/arm64/v8) ولم يتم طلب منصة محددة

ثم يتعطل الحاوية ويعاد تشغيلها باستمرار.

تحديث: أرى أنه لم يتم تقديم صورة داعمة بعد؟ قارن:

https://hub.docker.com/r/discourse/base/tags

(وهو مدعوم)

مع

https://hub.docker.com/r/discourse/discourse_dev/tags

لا يوجد إصدار arm64 مدرج للأخير…

هل نجح أي شخص على نظام Mac OS (13.6.3) (Intel) في تشغيل Discourse في docker… ويمكنه مشاركة كيف تجاوز خطأ Error: Cannot find module 'esbuild'؟

لاحظت في تطبيق boot_dev أن yarn لا يتم تشغيله أبدًا للدليل العلوي، فقط app/assets/javascripts/discourse:

echo "Yarn install..."
"${SCRIPTPATH}/exec" yarn install --cwd app/assets/javascripts/discourse

لذلك، من المنطقي أن esbuild غير مثبت، نظرًا لأنه تبعية موصوفة في package.json العلوي.

ومع ذلك، لا يمكن تثبيت package.json هذا خارج الحاوية، حيث سيتم تثبيت الإصدار الخاطئ من esbuild (Mac، وليس Linux… ولكن الحاوية تحتاج إلى Linux).

ألا ينبغي أن يكون هناك سطر في boot_dev فوق “installing gems” يبدو كالتالي؟

echo "Installing top-level package.json ..."
"${SCRIPTPATH}/exec" yarn install

عندما أضيف سطرًا كهذا، يمكنني تجاوز خطوة الترحيل دون خطأ esbuild…

هل تم إصلاح هذا؟ لقد قمت بتثبيت وتشغيل، ولكن في اليوم التالي عندما عدت إليه وقمت بتشغيل d/boot_dev، ظهر لي هذا التحذير ولن يتم إنشاء الحاوية الخاصة بي بعد الآن.

Discourse development is unlikely to work using Docker's architecture emulation.
Please try a native development installation.
Using source in: /Users/n_selvidge/discourse
Using data in:   /Users/n_selvidge/discourse/data/postgres```
إعجاب واحد (1)

كيفية تثبيت بيئة تطوير Discourse عبر http_proxy؟

تواصل مع مزود الوكيل وتأكد من السماح بهذه المكالمات؟

لقد واجهت نفس الخطأ عند تشغيل d/rails s،

/home/discourse/.bundle/gems/ruby/3.2.0/gems/activerecord-7.0.8.1/lib/active_record/connection_adapters/postgresql_adapter.rb:87:in `rescue in new_client': connection to server at "10.169.51.142", port 5432 failed: Connection refused (ActiveRecord::ConnectionNotEstablished)
	Is the server running on that host and accepting TCP/IP connections?

أي مساعدة ستكون موضع تقدير!

d/rails s يُرجع:
استجابة خطأ من الخادم: لا يوجد حاوية: discourse_dev

أي اقتراحات؟

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

هل قمت بتشغيل d/boot_dev أولاً؟

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

مرحباً، هل يمكنني ربطه بـ 0.0.0.0 بدلاً من ذلك؟

image

نعم، لقد أدخلت ذلك، شكرًا لك. للبدء من جديد، أفترض أنني أحذف الحاوية من واجهة Docker الرسومية وكذلك مجلد مستودع discourse؟