لقد توصلت إلى حل لمشكلتي. إنها عملية معقدة وحل بديل، لكنها تعمل. باختصار، ترقية 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 بإصلاح المشكلة. آمل أن يتم إصلاح هذا في الصورة الرئيسية للتطوير. سأكون سعيدًا بالمساهمة بطلب سحب، ولكن ترقية تبعية رئيسية تبدو شيئًا يتجاوز مجرد طلب سحب سريع مني.
حسنًا، على الأقل أنا غير عالق الآن!