فشل الترقية من v2.7.0.beta1 إلى v2.7.0.beta2

يرجى الاطلاع على هذا المستودع: gist:86508bebb133a06f79fadaeba345e3d6 · GitHub

هذه تثبيت قياسي ومستقل لمنصة Discourse، يحاول الترقية من v2.7.0.beta1 إلى v2.7.0.beta2

الفشل حدث هنا:

uglifyjs '/var/www/discourse/public/assets/_vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js' -m -c -o '/var/www/discourse/public/assets/vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js' --source-map "base='/var/www/discourse/public/assets',root='/assets',url='/assets/vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js.map'"
Parse error at _vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js:1850,34
        return Handlebars.compile(...arguments);
                                  ^
ERROR: Unexpected token: punc «.»
    at JS_Parse_Error.get (eval at <anonymous> (/usr/lib/node_modules/uglify-js/tools/node.js:18:1), <anonymous>:71:23)
    at fatal (/usr/lib/node_modules/uglify-js/bin/uglifyjs:394:27)
    at run (/usr/lib/node_modules/uglify-js/bin/uglifyjs:343:9)
    at Object.<anonymous> (/usr/lib/node_modules/uglify-js/bin/uglifyjs:259:5)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
rake aborted!
Errno::ENOENT: No such file or directory @ rb_file_s_size - /var/www/discourse/public/assets/vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js
/var/www/discourse/lib/tasks/assets.rake:287:in `size'
/var/www/discourse/lib/tasks/assets.rake:287:in `block (4 levels) in <main>'
/var/www/discourse/lib/tasks/assets.rake:178:in `block in concurrent?'
/var/www/discourse/lib/tasks/assets.rake:278:in `block (3 levels) in <main>'
/var/www/discourse/lib/tasks/assets.rake:269:in `each'
/var/www/discourse/lib/tasks/assets.rake:269:in `block (2 levels) in <main>'
/var/www/discourse/lib/tasks/assets.rake:178:in `concurrent?'
/var/www/discourse/lib/tasks/assets.rake:266:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.3/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tasks: TOP => assets:precompile
(See full trace by running task with --trace)
Docker Manager: FAILED TO UPGRADE

هل لديك أي أفكار؟ الموقع غير متاح نتيجة لذلك. شكرًا لك.

هذا أمر مقلق بعض الشيء. هل نفد المساحة على القرص أم شيء من هذا القبيل؟

مرحبًا، لا — على المضيف، هناك 70 جيجابايت متاحة. فقط 1% من العقد (inodes) قيد الاستخدام.

افترضت أن رسالة “لا يوجد ملف أو دليل” كانت مجرد أثر جانبي لهذا:

Parse error at _vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js:1850,34
        return Handlebars.compile(...arguments);
                                  ^
ERROR: Unexpected token: punc «.»

ذلك الملف موجود بالتأكيد:

root@redmine:/var/discourse# ./launcher enter app
ls -al ls -al root@xxxxx-app:/var/www/discourse# ls -al /var/www/discourse/public/assets/vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js
-rw-r--r-- 1 discourse www-data 659907 Jan 22 04:55 /var/www/discourse/public/assets/vendor-b631d4ab0775fdbe453aa2158e18dc41826d0ba619e5f2731e5b9fa4c458af99.js

لست متأكدًا. لقد قمت للتو بترقية نسختي المستضافتين ذاتيًا دون أي مشاكل على الإطلاق.

هل هناك أي إضافات غير عادية، أو إضافات تابعة لجهات خارجية، أو تخصيصات واسعة النطاق؟

شكرًا لك.. لا توجد إضافات أو تخصيصات ثقيلة على الإطلاق.. كان الأمر في الأساس تثبيتًا جديدًا في أواخر عام 2020، مع تعديلات بسيطة فقط على الإعدادات عبر واجهة المسؤول لأمور مثل أذونات المشرفين وما إلى ذلك. أمر غريب جدًا.

للأسف لم أقوم بنسخ احتياطي قبل تشغيل الترقية، رغم أن لدي بعض النسخ الاحتياطية الآلية من قبل بضعة أيام. أعتقد أن هذا هو طريقي الوحيد للخروج من هذا الموقف حاليًا.. وبما أنني لست ملمًا بلغة Ruby، فلا أدري كيف يمكنني فهم ذلك الخطأ.

آه، يبدو أن تشغيل ./launcher restart app قد أعادها إلى العمل على الأقل رغم تحديثات مخطط قاعدة البيانات التي تم تنفيذها. قبل ذلك، كانت تُرجع خطأ 500. الحمد لله

هذه هي الملفات الموجودة في مجلد الإضافات، وأفترض أنها جاءت مع التثبيت الأساسي، حيث لم قمت بإضافتها يدويًا

root@redmine-app:/var/www/discourse# ls -al plugins/
total 12
drwxr-xr-x 22 discourse discourse 4096 Nov  4 04:54 .
drwxr-xr-x 56 discourse discourse 4096 Jan 22 04:55 ..
drwxr-xr-x 13 discourse discourse   43 Nov  4 04:54 discourse-details
drwxr-xr-x 16 discourse discourse   54 Nov  4 04:54 discourse-local-dates
drwxr-xr-x 20 discourse discourse   69 Jan 22 04:55 discourse-narrative-bot
drwxr-xr-x 11 discourse discourse   59 Nov  4 04:54 discourse-presence
drwxr-xr-x 19 discourse root      4096 Jan 22 04:43 docker_manager
drwxr-xr-x  4 discourse discourse   51 Sep 28 05:11 lazy-yt
drwxr-xr-x 25 discourse discourse   99 Nov  4 04:54 poll
drwxr-xr-x  8 discourse www-data   129 Nov  4 04:54 styleguide

مظهر الموقع معطوب قليلاً بعد إعادة التشغيل، أعتقد لأن الأصول لم تكتمل تجميعها… أتساءل إذا كان هناك طريقة لإتمام ذلك يدويًا..

هذا هو القسم في ملف js الخاص بالبائع الذي يشكو منه:

// allow us to import this as a module
if (typeof define !== "undefined") {
  define("handlebars", ["exports"], function (__exports__) {
    // It might not be defined server side, which is OK for pretty-text
    if (typeof Handlebars !== "undefined") {
      // eslint-disable-next-line
      __exports__.default = Handlebars;
      __exports__.compile = function () {
        // eslint-disable-next-line
        return Handlebars.compile(...arguments);
      };
    }
  });

  define("handlebars-compiler", ["exports"], function (__exports__) {
    // eslint-disable-next-line
    __exports__.default = Handlebars.compile;
  });
}
;

السطر 1850 (الذي يسبب الخطأ) هو هذا الجزء:

        return Handlebars.compile(...arguments);

هل توجد أي حيلة مؤقتة يمكنني فعلها هنا لتجاوز المشكلة؟ أم أن هذا الملف سيتم توليده في كل مرة أحاول فيها الترقية؟ (ملاحظة: يبدو أنه يعتقد أنني أكملت الترقية بالكامل بعد إعادة التشغيل… لكن المظهر معطّل… أتساءل ما إذا كان بإمكاني تجاوز هذه الخطوة بطريقة ما، أو ما إذا كان عليّ الاستعادة من النسخة الاحتياطية، أساسًا…)

يأتي هذا القسم بأكمله من الملف التالي:

app/assets/javascripts/handlebars-shim.js

أظن أن أداة uglify-js تعتبر عبارة return Handlebars.compile(...arguments); خطأً في بناء الجملة.

ما لا أفهمه هو كيف يمكن أن يكون هذا فريدًا في تثبيت خاصتي، فكل هذا داخل حاوية Docker.

يبدو أن الأمر قد انتقل من هذا الالتزام؟ DEV: Sync up more Ember CLI features (#11790) · discourse/discourse@83347ac · GitHub

حسناً - لا أعرف السبب، لكنني أجريت عملية الترقية اليدوية (git pull; ./launcher rebuild app) وقد نجحت.

كثير من الأنشطة الأخرى مثل ترقية postgres وما إلى ذلك تمت كجزء من تلك الترقية اليدوية.

تخميني: كان هناك شيء في ذلك الالتزام (commit) أعلاه غير متوافق مع uglify-js أو إصدار rails أو شيء آخر في الحاوية الأصلية. كانت في الأساس ترقية تتطلب عملية الترقية ‘اليدوية’.

لأن واجهة المسؤول على الويب سمحت لي بترقية docker_manager ثم تطبيق discourse نفسه، افترضت أن هذا لن يكون ضرورياً (أعلم أنه أحياناً يُذكر أن الترقية عبر واجهة المسؤول على الويب لا يمكن إجراؤها، ويجب القيام بها يدوياً… لكن هذا لم يحدث في هذه الحالة، وكان يجب أن يحدث على الأرجح…)

شكراً على مساعدتك على أي حال

حدث لي نفس الشيء — فشل الترقية عبر الويب مع خطأ “رمز غير متوقع: فاصلة منقوطة”، لكن السحب وإعادة البناء يدويًا نجحا.

واجهتُ أيضًا مشكلة عند تشغيل هذا التحديث (ترقية الويب) :worried:
بعد تنفيذ الأوامر التالية:
cd /var/discourse
git pull
./launcher rebuild app
يعمل discourse، لكن لا يمكن الدخول إلى لوحة الإدارة (/admin)

ساعد تحديث ubuntu في استعادة العمل

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

بالمناسبة، كنت أحاول استخدام هذه الوظيفة في بيئة التطوير ولم تنجح معي… كائن Handlebars يحتوي فقط على create() وليس compile()، رغم أنني قد أكون في الطريق الخطأ… لقد رفعت المشكلة هنا: Adding a bespoke raw template