مرحبًا،
لقد قمت بتثبيت Discourse على خادم يعمل بنظام Fedora 31 باستخدام دليل التثبيت الموصى به، لكنني استخدمت podman بدلاً من Docker لتشغيل الحاوية. سار كل شيء على ما يرام هذا الصباح عند الإعداد الأولي، لكنني واجهت مشاكل في جعل HTTP العادي يعمل مع Nginx على المضيف، واضطررت إلى استخدام شهادات SSL على مثيلي Nginx. قمت بإعداد Discourse وكان كل شيء على ما يرام.
قررت لاحقًا إعادة بناء Discourse مع تعطيل SSL وبناءه باستخدام حساب مستخدم غير جذري. عمل HTTP العادي مع المضيف بشكل جيد، لكنني حصلت على صفحة بيضاء (كان العنوان صحيحًا، وشعار الموقع يعمل).
root@xena-app:/var/www/discourse# ls public/assets -al
total 15640
drwxr-xr-x. 2 discourse discourse 10 Jan 11 13:54 .
drwxr-xr-x. 3 discourse discourse 29 Jan 11 13:57 ..
-rw-r--r--. 1 discourse discourse 595 Jan 11 13:49 _activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js
-rw-r--r--. 1 discourse discourse 250 Jan 11 13:54 activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js.br
-rw-r--r--. 1 discourse discourse 420 Jan 11 13:54 activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js.gz
-rw-r--r--. 1 discourse discourse 695 Jan 11 13:54 activate-account-7a1f8d46287194007ee607f79af56217e6e6238e4ca159c5da6974005a1254c5.js.map
-rw-r--r--. 1 discourse discourse 990519 Jan 11 13:50 _admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js
-rw-r--r--. 1 discourse discourse 83903 Jan 11 13:54 admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.br
-rw-r--r--. 1 discourse discourse 106465 Jan 11 13:54 admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.gz
-rw-r--r--. 1 discourse discourse 366446 Jan 11 13:54 admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.map
drwxr-xr-x. 2 discourse discourse 4096 Jan 11 13:54 admin-login
...
الملفات المطلوبة مفقودة بالفعل، حتى أن Nginx يشير إلى ذلك:
2020/01/11 13:59:49 [error] 60#60: *20 open() "/var/www/discourse/public/assets/plugins/poll-57c9059384e3daeaee3d974c985d85a2b8462bb2629eb0b1834451056d1e1459.js" failed (2: No such file or directory), client: 10.0.2.2, server: _, request: "GET /assets/plugins/poll-57c9059384e3daeaee3d974c985d85a2b8462bb2629eb0b1834451056d1e1459.js HTTP/1.0", host: "idlerpg.xyz", referrer: "https://idlerpg.xyz/"
ظننت أن هذه مشكلة في التثبيت الخاص بي، لأن هذه الملفات كانت موجودة في التثبيت القديم هذا الصباح كجذر على المضيف! قمت بمسح المجلد المشترك وأعدت البناء كمستخدم غير جذري مع نفس النتائج مرارًا وتكرارًا. ثم جربت مرة أخرى، هذه المرة كجذر مع إعدادات مماثلة مثل هذا الصباح، وحصلت على نفس المشاكل.
يظهر تثبيت غير جذري دائمًا صفحة “تهانينا، لقد قمت بتثبيت Discourse!”، لكن بعد الانتهاء من التثبيت، أحصل على صفحة فارغة لأن ملفات الأصول مفقودة.
تم تغيير هذا إلى خطأ. لا أستطيع الحصول على إصدار يحتوي على جميع الأصول عند بناء tests-passed. حاولت الدخول إلى الحاوية وتنفيذ أمر rake assets:precompile، لكن الأصول نفسها لا تزال مفقودة.
حسنًا، بعد بعض الاختبارات، أستطيع الآن القول إنه يظهر دائمًا صفحة فارغة بعد كل إعادة بناء. إذا قمت بتشغيل RAILS_ENV=production bin/rake assets:precompile، فإن الأمر يعمل دائمًا بعد ذلك. لا أعرف السبب، فلابد أن يتم تجميعها في إعادة البناء على أي حال؟
نحن هنا لأن شيئًا ما لا يعمل. ينبغي ويعمل حالتان مختلفتان.
أنت تدّعم بثقة أن Podman غير متورط. سيكون من الجيد إثبات ذلك لاستبعاده بوضوح كعامل. حسب علمي، لم تكمل طريقة التثبيت الرسمية باستخدام Docker لمعرفة ما إذا كان ذلك سيحل المشكلة.
مثير للاهتمام، إذن الملفات مُعدّة بشكل صحيح، لكن الاستمرارية تفشل؟
سأقوم بالتحقق من كيفية عمل حجم Podman، وما هو السائق الذي يدعمه. في عالم Docker، واجهنا الكثير من المشاكل الغريبة مع سائقات التخزين على مر السنين، مما دفعنا حتى إلى الاحتفاظ بقائمة لـ “سائقات موثوقة” في سكريبت التشغيل الخاص بنا.
وللتوضيح، كانت تجاربي مع Podman تختبر في الواقع launcher وليس Discourse. على الأقل، عند اختباره، كان يعتمد على تفاصيل إخراج Docker التي لا يحاول Podman محاكاتها.
@Adriany، أظن أنك تستخدم محرك التخزين الافتراضي، وهو نفس المحرك الموصى به لـ Discourse، والذي يكون في Docker هو “overlay2” — لكنني لا أعرف ما إذا كان هذا هو الحال.
أنا أستخدم overlayfs، وهو ما يعادل overlay2.
من المثير للاهتمام أنه تم البناء بنجاح دون وجود أصول مفقودة بعد بعض عمليات البناء الأخرى التي كانت تحتوي على أصول مفقودة عندما حاولت إضافة الإضافات. عندما أعدت البناء دون إضافات، سار كل شيء بسلاسة تامة. ماذا يحدث؟
تعديل: لقد نجح الأمر معي، والآن تم تخزين الأصول هنا في ذاكرة التخزين المؤقت. أثناء التشغيل، توقف عن العمل للمستخدمين الآخرين.
تعديل 2: جعلت عملية إعادة بناء أخرى الأصول تتعطل كما كان من قبل، والحل كان إعادة البناء كما كان من قبل.
إذا تم إنشاء الملفات بنجاح من خلال خط تجميع الأصول الخاصة بنا وأعلنت نظام التشغيل عدم وجود أخطاء، إلا أنها تختفي بعد إعادة البناء (التي تعيد تشغيل الحاوية فعليًا)، فإنني أراهن مرة أخرى على سائق التخزين الخاص بـ Podman.
ما لم يتمكن أحد من تكرار هذا السلوك نفسه باستخدام Docker (وهناك سيكون هناك عدة مواضيع في حال حدوث ذلك)، فأنا أخشى أنه يتعين عليك فتح تذكرة في مشروع Podman بخصوص هذه المشكلة.