تعطل بعد محاولة التحديث

بعد محاولة تحديث Discourse عبر لوحة الإدارة، تعطلت العملية ولم يعد المنتدى يعمل. لحسن الحظ، هناك حل للمشكلة :slight_smile:

افتح طرفية (Terminal) على خادمك، ثم نفذ الأوامر التالية:

cd /var/discourse

./launcher rebuild app

بعد اكتمال إعادة البناء، عاد كل شيء إلى طبيعتي وتم تحديث المنتدى. كما سأترك سجل الخطأ الذي تسبب في المشكلة لأنه مرتبط بإضافة (Plugin) في Discourse.

LOG

Compiling 46 plugins…
rake aborted!
AssetProcessor::TimeoutError: [PLUGIN discourse-doc-categories] Script terminated: timeout after 120s (AssetProcessor::TimeoutError)
/var/www/discourse/lib/plugin/js_compiler.rb:32 ‘Plugin::JsCompiler#compile!’
/var/www/discourse/lib/plugin/js_manager.rb:136 ‘Plugin::JsManager#compile_js_bundle’
/var/www/discourse/lib/plugin/js_manager.rb:57 ‘block in Plugin::JsManager#compile!’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:689 ‘Parallel.call_with_index’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:659 ‘Parallel.process_incoming_jobs’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:638 ‘block in Parallel.worker’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:629 ‘Process.fork’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:629 ‘Parallel.worker’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:619 ‘block in Parallel.create_workers’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Array#each’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Enumerable#each_with_index’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Parallel.create_workers’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:557 ‘Parallel.work_in_processes’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:304 ‘Parallel.map’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:248 ‘Parallel.each’
/var/www/discourse/lib/plugin/js_manager.rb:56 ‘Plugin::JsManager#compile!’
/var/www/discourse/lib/tasks/assets.rake:27 'block in ’

Caused by:
AssetProcessor::TimeoutError: Script terminated: timeout after 120s (AssetProcessor::TimeoutError)
/var/www/discourse/lib/asset_processor.rb:185 ‘MiniRacer::Context#call’
/var/www/discourse/lib/asset_processor.rb:185 ‘block in AssetProcessor.v8_call’
/var/www/discourse/lib/asset_processor.rb:184 ‘Thread::Mutex#synchronize’
/var/www/discourse/lib/asset_processor.rb:184 ‘AssetProcessor.v8_call’
/var/www/discourse/lib/asset_processor.rb:264 ‘AssetProcessor#rollup’
/var/www/discourse/lib/plugin/js_compiler.rb:21 ‘Plugin::JsCompiler#compile!’
/var/www/discourse/lib/plugin/js_manager.rb:136 ‘Plugin::JsManager#compile_js_bundle’
/var/www/discourse/lib/plugin/js_manager.rb:57 ‘block in Plugin::JsManager#compile!’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:689 ‘Parallel.call_with_index’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:659 ‘Parallel.process_incoming_jobs’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:638 ‘block in Parallel.worker’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:629 ‘Process.fork’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:629 ‘Parallel.worker’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:619 ‘block in Parallel.create_workers’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Array#each’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Enumerable#each_with_index’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Parallel.create_workers’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:557 ‘Parallel.work_in_processes’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:304 ‘Parallel.map’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:248 ‘Parallel.each’
/var/www/discourse/lib/plugin/js_manager.rb:56 ‘Plugin::JsManager#compile!’
/var/www/discourse/lib/tasks/assets.rake:27 'block in ’

Caused by:
MiniRacer::ScriptTerminatedError: terminated (MiniRacer::ScriptTerminatedError)
/var/www/discourse/lib/asset_processor.rb:185 ‘MiniRacer::Context#call’
/var/www/discourse/lib/asset_processor.rb:185 ‘block in AssetProcessor.v8_call’
/var/www/discourse/lib/asset_processor.rb:184 ‘Thread::Mutex#synchronize’
/var/www/discourse/lib/asset_processor.rb:184 ‘AssetProcessor.v8_call’
/var/www/discourse/lib/asset_processor.rb:264 ‘AssetProcessor#rollup’
/var/www/discourse/lib/plugin/js_compiler.rb:21 ‘Plugin::JsCompiler#compile!’
/var/www/discourse/lib/plugin/js_manager.rb:136 ‘Plugin::JsManager#compile_js_bundle’
/var/www/discourse/lib/plugin/js_manager.rb:57 ‘block in Plugin::JsManager#compile!’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:689 ‘Parallel.call_with_index’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:659 ‘Parallel.process_incoming_jobs’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:638 ‘block in Parallel.worker’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:629 ‘Process.fork’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:629 ‘Parallel.worker’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:619 ‘block in Parallel.create_workers’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Array#each’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Enumerable#each_with_index’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:618 ‘Parallel.create_workers’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:557 ‘Parallel.work_in_processes’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:304 ‘Parallel.map’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/parallel-2.1.0/lib/parallel.rb:248 ‘Parallel.each’
/var/www/discourse/lib/plugin/js_manager.rb:56 ‘Plugin::JsManager#compile!’
/var/www/discourse/lib/tasks/assets.rake:27 'block in ’
Tasks: TOP => assets:precompile
(See full trace by running task with --trace)
/var/www/discourse/script/assemble_ember_build.rb:167 ‘Kernel#system’: Command failed with exit 1: bin/rake (RuntimeError)
from /var/www/discourse/script/assemble_ember_build.rb:167 ‘’
Docker Manager: FAILED TO UPGRADE
#<RuntimeError: RuntimeError>
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:205 ‘DockerManager::Upgrader#run’
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:105 ‘DockerManager::Upgrader#upgrade’
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:19 'block in ’
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6 ‘Kernel#fork’
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6 ‘’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/commands/runner/runner_command.rb:44 ‘Kernel.load’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/commands/runner/runner_command.rb:44 ‘block in Rails::Command::RunnerCommand#perform’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/activesupport-8.0.5/lib/active_support/execution_wrapper.rb:91 ‘ActiveSupport::ExecutionWrapper.wrap’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/commands/runner/runner_command.rb:70 ‘Rails::Command::RunnerCommand#conditional_executor’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/commands/runner/runner_command.rb:43 ‘Rails::Command::RunnerCommand#perform’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/thor-1.5.0/lib/thor/command.rb:28 ‘Thor::Command#run’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/thor-1.5.0/lib/thor/invocation.rb:127 ‘Thor::Invocation#invoke_command’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/command/base.rb:178 ‘Rails::Command::Base#invoke_command’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/thor-1.5.0/lib/thor.rb:538 ‘Thor.dispatch’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/command/base.rb:73 ‘Rails::Command::Base.perform’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/command.rb:65 ‘block in Rails::Command.invoke’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/command.rb:143 ‘Rails::Command.with_argv’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/command.rb:63 ‘Rails::Command.invoke’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/railties-8.0.5/lib/rails/commands.rb:18 ‘’
/usr/local/lib/ruby/3.4.0/bundled_gems.rb:82 ‘Kernel.require’
/usr/local/lib/ruby/3.4.0/bundled_gems.rb:82 ‘block (2 levels) in Kernel#replace_require’
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/bootsnap-1.24.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:33 ‘Kernel#require’
bin/rails:18 ‘’
Spinning up 1 Pitchfork worker(s) that were stopped initially

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

شكرًا لك <3

إعجابَين (2)

لهذا السبب لا أقوم أبدًا بالتحديث من واجهة المسؤول :woman_shrugging:t2:

هذه هي الطريقة المعتادة لتحديث التثبيتات القياسية المستضافة ذاتيًا

8 إعجابات

يبدو أن الأمر يتعلق بإضافة محددة لم يتم بناؤها ضمن حد زمني قدره دقيقتين.

هل يمكنك مشاركة مواصفات خادمك @TroLLoBlogger؟

5 إعجابات

إذا كنت تقصد شيئًا آخر، فأخبرني :smiley:

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

مجرد فضول، هل قمت بتكوين مساحة تبديل (swap)؟

قد يسبب لك ذلك المعالج الواحد (vCPU) بعض المشاكل.

3 إعجابات

نعم، هذا ممكن. لكن قبل يومين لم تكن هناك أي مشاكل على الإطلاق مع التحديث. سأقوم أيضًا بإنشاء مساحة تبادل (swap) بحجم 2 جيجابايت وسنرى النتيجة :slight_smile:

sudo fallocate -l 2G /swapfile        
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

3 إعجابات

هـم، قد يكون معالج وحدة واحدة (vCPU) غير كافٍ لتحديثات الويب التي تتضمن تعقيد بناء أصول الواجهة الأمامية في الوقت الحالي.

ما رأيك @david؟ مع الأصول المُعدة مسبقًا، سيعمل الأمر بسلاسة، لكن قد نحتاج إلى اكتشاف وتعطيل تحديثات الويب في هذا المزيج…

4 إعجابات

يجب سحب الأصول المُعدّة مسبقًا، حتى مع التحديث القائم على الويب (يتم توزيعها بشكل منفصل عن صورة Docker)

doc-categories ليست إضافة أساسية، لذا لا نقوم بتوزيع أصول لها. لكن… إنها إضافة بسيطة جدًا. 120 ثانية وقت طويل جدًا لحدوث ذلك :thinking:

4 إعجابات

أعلم، ما أعنيه هو أن الجمع بين

الإضافات غير الأساسية + تثبيت بمعالج واحد (vCPU)

قد يكون حالة تستدعي إخبار المستخدم بإعادة البناء.

5 إعجابات

لدي خادم بـ 1 معالج (vCPU) وذاكرة عشوائية 1 جيجابايت. حاولت ما لا يقل عن 10 مرات، ولم ينجح تشغيل Discourse بنجاح سوى مرة واحدة (لكن اضطررت لإعادة البناء، مما أدى إلى حلقة فشل لا تنتهي). أضفت مساحة تبديل (swap) مقدارها 2 جيجابايت، ثم 5 جيجابايت، لكن دون جدوى :person_shrugging: . لم أستخدم أي إضافات غير أساسية، بل… فشل الأمر ببساطة.

إعجابَين (2)

1 نواة معالج و 1 جيجابايت من ذاكرة الوصول العشوائي - هذا خادم ضعيف جدًا إذا لم أكن مخطئًا، خاصة من حيث الذاكرة العشوائية. لدي أيضًا معالج واحد، لكن ذاكرتي العشوائية تبلغ 4 جيجابايت. وهو ما لا يزال منخفضًا بوضوح إذا كانت هناك إضافات خارجية. لكن سأفكر في الأمر. في الوقت الحالي، يمكن لـ SWAP أن يعمل لي، وإذا لم يكن كذلك، فسأقوم بإيقاف الإضافات الخارجية حتى أنتقل إلى خادم أكبر.

3 إعجابات

نعم، ربما يكون تحميل 1 معالج فردي (vCPU) يحاول تشغيل nginx وRuby وPostgreSQL وRedis وNodeJS لإعادة البناء أكثر من طاقته.

3 إعجابات

مجرد معلومة، أقوم بتشغيل خادم بـ 2 معالج افتراضي وذاكرة عشوائية 4 جيجابايت ومساحة تخزين 40 جيجابايت لإحدى حالاتي، وأضفت إضافة discourse-doc-categories لاختبار البناء (لدي أيضًا إضافتان غير رسميتين فوق الإضافات الأساسية):

               total        used        free      shared  buff/cache   available
Mem:           3.7Gi       1.6Gi        98Mi        69Mi       2.3Gi       2.2Gi
Swap:          2.0Gi        14Mi       2.0Gi

على أي حال، قمت للتو بتشغيل آخر تحديث (حرج) من واجهة المسؤول على هاتفي المحمول للمجرد من التجربة، وكان سريعًا وسلسًا هذه المرة. :slight_smile:

إعجابَين (2)

بعد التحديث مرة واحدة عبر لوحة الإدارة، فقدتُ عددًا كبيرًا من المرفقات. ومنذ ذلك الحين، لم أعد أستخدم لوحة الإدارة للترقية، بل أعتمد دائمًا على أمر rebuild.

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

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

الفرق الرئيسي هو الحمل على الخادم.