ال أصول Discourse مفقودة

مرحبًا،
لقد قمت بتثبيت 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!”، لكن بعد الانتهاء من التثبيت، أحصل على صفحة فارغة لأن ملفات الأصول مفقودة.

هل هناك أي طريقة لإصلاح الأصول المفقودة؟

في حال تساءل أحد عما إذا كان قد نجح هذا الصباح حقًا، إليك لقطة شاشة من هاتفي المحمول


لا يسمح لي ديسكورس باستخدام صورتين في منشور واحد بعد :slight_smile:

تم تغيير هذا إلى خطأ. لا أستطيع الحصول على إصدار يحتوي على جميع الأصول عند بناء tests-passed. حاولت الدخول إلى الحاوية وتنفيذ أمر rake assets:precompile، لكن الأصول نفسها لا تزال مفقودة.

يبدو أنه بعد إعادة بناء لا حصر لها، يعمل الآن بشكل سحري. غريب.

مرحبًا أدرياني، أهلاً بك في المنتدى

آخر ما علمت، أن docker شرط وليس خيارًا. أين رأيت دليل التثبيت الأحدث هذا؟

لقد استبدلت Docker بـ Podman للتو، ويعمل بشكل ممتاز. إنهما متوافقان من حيث بناء الجملة لسطر الأوامر.

حسنًا، بعد بعض الاختبارات، أستطيع الآن القول إنه يظهر دائمًا صفحة فارغة بعد كل إعادة بناء. إذا قمت بتشغيل RAILS_ENV=production bin/rake assets:precompile، فإن الأمر يعمل دائمًا بعد ذلك. لا أعرف السبب، فلابد أن يتم تجميعها في إعادة البناء على أي حال؟

هل رأيت هذا الموضوع، وتحديداً هذا المنشور حول عدم توافق Podman مع Docker؟

حسنًا، إنه يعمل بالفعل. لا ينبغي أن يؤثر Podman على الملفات التي ستكون نتيجة التجميع المبدئي للأصول.

في مرحلة تجميع الأصول لإعادة البناء، هل ترى أي آثار رجعية في المخرجات؟

نحن هنا لأن شيئًا ما لا يعمل. ينبغي ويعمل حالتان مختلفتان.

أنت تدّعم بثقة أن Podman غير متورط. سيكون من الجيد إثبات ذلك لاستبعاده بوضوح كعامل. حسب علمي، لم تكمل طريقة التثبيت الرسمية باستخدام Docker لمعرفة ما إذا كان ذلك سيحل المشكلة.

نعم، أفعل.

أنا، [2020-01-12T20:58:31.800117 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake assets:precompile'
جاري حذف الملفات المؤقتة
جاري تجميع الأصول
أنا، [2020-01-12T20:58:38.208107 #758]  INFO -- : كتابة /var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js
أنا، [2020-01-12T20:59:02.428630 #758]  INFO -- : كتابة /var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js
أنا، [2020-01-12T20:59:02.447192 #758]  INFO -- : كتابة /var/www/discourse/public/assets/preload-store-d32dcf974dddcac742f8a7a6aa7fcd686185920b201029d0ecb2b85527ef9034.js
أنا، [2020-01-12T20:59:02.707559 #758]  INFO -- : كتابة /var/www/discourse/public/assets/browser-update-1741a2ed67a367faeb0a582af064457e8b1b1354e52e6efcf8bf26301166dec8.js
أنا، [2020-01-12T20:59:02.753632 #758]  INFO -- : كتابة /var/www/discourse/public/assets/break_string-cc617154cd957804f2f6a1f3bc68258c9cdca3d4b9a322bf777d145fed04790e.js
أنا، [2020-01-12T20:59:04.073148 #758]  INFO -- : كتابة /var/www/discourse/public/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js
أنا، [2020-01-12T20:59:06.303026 #758]  INFO -- : كتابة /var/www/discourse/public/assets/pretty-text-bundle-fa6ea00e2000bf2f9ed3f069be9253477fed5e7290b5d109a3e2d9498ac70e81.js
... [تم اختصار]
108798.339928812 جاري الضغط: vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js
uglifyjs '/var/www/discourse/public/assets/_vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js' -m -c -o '/var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js' --source-map "root='/assets',url='/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js.map'" --output '/var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js'
gzip -f -c -9 /var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js > /var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js.gz

brotli -f --quality=11 /var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js --output=/var/www/discourse/public/assets/vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js.br


انتهى ضغط vendor-3b0a3ac5e0bc628422d6e99d3563fad4c474398644f70683eff0893b7a241513.js : 3.33 ثانية

108801.669283898 جاري الضغط: admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js
uglifyjs '/var/www/discourse/public/assets/_admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js' -m -c -o '/var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js' --source-map "root='/assets',url='/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.map'" --output '/var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js'
gzip -f -c -9 /var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js > /var/www/discourse/public/assets/admin-91c2a24a61c0ecd0200db1e808dbadafb9f0f1bb5179acea5b2b7dbd4b4cc5f9.js.gz
[...]

إنها تقوم بجمعها بالفعل، لكن عليّ دائمًا إعادة القيام بذلك بعد البناء لتظهر الملفات المفقودة

مثير للاهتمام، إذن الملفات مُعدّة بشكل صحيح، لكن الاستمرارية تفشل؟

سأقوم بالتحقق من كيفية عمل حجم Podman، وما هو السائق الذي يدعمه. في عالم Docker، واجهنا الكثير من المشاكل الغريبة مع سائقات التخزين على مر السنين، مما دفعنا حتى إلى الاحتفاظ بقائمة لـ “سائقات موثوقة” في سكريبت التشغيل الخاص بنا.

وللتوضيح، كانت تجاربي مع Podman تختبر في الواقع launcher وليس Discourse. على الأقل، عند اختباره، كان يعتمد على تفاصيل إخراج Docker التي لا يحاول Podman محاكاتها.

@Adriany، أظن أنك تستخدم محرك التخزين الافتراضي، وهو نفس المحرك الموصى به لـ Discourse، والذي يكون في Docker هو “overlay2” — لكنني لا أعرف ما إذا كان هذا هو الحال.

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

تعديل: لقد نجح الأمر معي، والآن تم تخزين الأصول هنا في ذاكرة التخزين المؤقت. أثناء التشغيل، توقف عن العمل للمستخدمين الآخرين.

تعديل 2: جعلت عملية إعادة بناء أخرى الأصول تتعطل كما كان من قبل، والحل كان إعادة البناء كما كان من قبل.

إذا تم إنشاء الملفات بنجاح من خلال خط تجميع الأصول الخاصة بنا وأعلنت نظام التشغيل عدم وجود أخطاء، إلا أنها تختفي بعد إعادة البناء (التي تعيد تشغيل الحاوية فعليًا)، فإنني أراهن مرة أخرى على سائق التخزين الخاص بـ Podman.

ما لم يتمكن أحد من تكرار هذا السلوك نفسه باستخدام Docker (وهناك سيكون هناك عدة مواضيع في حال حدوث ذلك)، فأنا أخشى أنه يتعين عليك فتح تذكرة في مشروع Podman بخصوص هذه المشكلة.

مرحبًا،
لقد قمت بمزيد من التحقيق ويبدو أنني كنت مخطئًا في تخميني حول مكان تخزين الملفات أو ربما كنت مجرد غير دقيق في البحث عنها.

جميع الملفات تُرجع خطأ 404، ومع ذلك خذ هذا كمثال:

root@idlerpg:/var/www/discourse# find . -type f -name "*discourse-solved*"
./tmp/stylesheet-cache/discourse-solved_9_cb2984706f4402e95fd787160a5588ed0972ccc3.css
./tmp/stylesheet-cache/discourse-solved_9_cb2984706f4402e95fd787160a5588ed0972ccc3.css.map
./public/assets/plugins/_discourse-solved-5b7312e4207059eb2654a46e804b4c899cfc1e2a362d0d60e580943f9eb9d419.js
./public/assets/plugins/discourse-solved-5b7312e4207059eb2654a46e804b4c899cfc1e2a362d0d60e580943f9eb9d419.js.gz
./public/assets/plugins/discourse-solved-5b7312e4207059eb2654a46e804b4c899cfc1e2a362d0d60e580943f9eb9d419.js.br
./public/assets/plugins/discourse-solved-5b7312e4207059eb2654a46e804b4c899cfc1e2a362d0d60e580943f9eb9d419.js.map
./app/assets/javascripts/plugins/discourse-solved.js.erb
./plugins/discourse-solved/test/javascripts/acceptance/discourse-solved-test.js.es6

إنها موجودة بالفعل، لذا أعتقد أن هذه مشكلة في Discourse وليست في Podman، لقد فشلت فقط في البحث عن الملفات بشكل صحيح.

ظننت أنها قد تكون مشكلة في Cloudflare، ولكن عندما أقوم بطلب سريع باستخدام curl على localhost على الخادم، أحصل أيضًا على خطأ 404.

هل يمكنك تقديم مثال تكرار لهذه المشكلة في Docker؟