تحديث من 3.0.0.beta16 إلى 3.1.0.beta2

حاولت إجراء نسخة احتياطية وفشلت النسخة الاحتياطية.

حاولت إجراء ترقية.

في البداية، كانت شاشة الترقية تحتوي على كل شيء معطلاً. أعدت التشغيل ثم تمكنت من تحديد ترقية docker_manager. فشلت هذه مع:

rake aborted!
NoMethodError: undefined method `path' for nil:NilClass

لذلك، اخترت الاتصال بالخادم عبر ssh وحاولت إعادة البناء وهذا ما حصلت عليه:

root@Discourse-1:/var/discourse# ./launcher rebuild app
x86_64 arch detected.
WARNING: containers/app.yml file is world-readable. You can secure this file by running: chmod o-rwx containers/app.yml
Ensuring launcher is up to date
Fetching origin
Launcher is up-to-date
............
Downloading MaxMindDB...
Compressing Javascript and Generating Source Maps

I, [2023-03-10T03:08:58.958320 #1]  INFO -- : Terminating async processes
I, [2023-03-10T03:08:58.958649 #1]  INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 42
I, [2023-03-10T03:08:58.958745 #1]  INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 103
103:signal-handler (1678417738) Received SIGTERM scheduling shutdown...
2023-03-10 03:08:58.959 UTC [42] LOG:  received fast shutdown request
2023-03-10 03:08:58.966 UTC [42] LOG:  aborting any active transactions
2023-03-10 03:08:58.969 UTC [42] LOG:  background worker "logical replication launcher" (PID 51) exited with exit code 1
2023-03-10 03:08:58.971 UTC [46] LOG:  shutting down
103:M 10 Mar 2023 03:08:59.047 # User requested shutdown...
103:M 10 Mar 2023 03:08:59.047 * Saving the final RDB snapshot before exiting.
2023-03-10 03:08:59.060 UTC [42] LOG:  database system is shut down
103:M 10 Mar 2023 03:08:59.073 * DB saved on disk
103:M 10 Mar 2023 03:08:59.073 # Redis is now ready to exit, bye bye...


FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake themes:update assets:precompile' failed with return #<Process::Status: pid 1004 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"assets_precompile", "cmd"=>["su discourse -c 'bundle exec rake themes:update assets:precompile'"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
e956a73644feb880e4b524bcbd4fa3c626fcfcc4edb3752f72e523194f663b4e
root@Discourse-1:/var/discourse# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
root@Discourse-1:/var/discourse# 

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

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

كم لديك من الذاكرة؟ حاول إعادة تشغيل جهازك وإعادة البناء مرة أخرى.

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

ماذا تخبرك كلمة free؟

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

3 إعجابات

في منشورك الآخر، تقدم القليل من المعلومات الإضافية حول فشل أمر rake:

إعجابَين (2)

هذه ليست المشكلة. يبدو أن هذا يعني عدم وجود مفتاح لتنزيل قاعدة بيانات max mind. المشكلة أعلاه.

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

إذا كانت المشكلة هي فشل في الإنشاء، فلن نهتم فقط باستخدام ذاكرة الوصول العشوائي (RAM) والتبديل، بل سنهتم بتكوين النواة. إذا ظهر هذا في السجلات

# تحذير: تم تعيين overcommit_memory على 0! قد يفشل الحفظ الخلفي في ظل ظروف الذاكرة المنخفضة. لإصلاح هذه المشكلة، أضف 'vm.overcommit_memory = 1' إلى /etc/sysctl.conf ثم أعد التشغيل أو قم بتشغيل الأمر 'sysctl vm.overcommit_memory=1' ليصبح هذا ساري المفعول.

فمن الجدير القيام بذلك كما هو موصى به. انظر أيضًا

تثبيت Discourse الخاص بي عام جدًا. بعد إعادة التشغيل، حصلت على نسخة احتياطية نظيفة. لذلك، قررت في النهاية إجراء تثبيت من البداية. فشل التثبيت بنفس الأخطاء التي نشرتها أعلاه. لقد كنت أقوم بتشغيل Discourse بذاكرة 6 جيجابايت في حاوية LXD على مدار السنوات الأربع الماضية دون مشاكل. يبلغ استخدام الذاكرة ثابتًا عند 1.9 جيجابايت. أثناء الترقية، تصل الذاكرة إلى ذروتها عند 5.1 جيجابايت. نسخة قاعدة البيانات الاحتياطية الخاصة بي هي 30 جيجابايت فقط من البيانات، لذا فإن تثبيتي صغير مقارنة بالآخرين. يعمل التكوين الخاص بي على Ubuntu 22.04. هل يجب أن أكون على توزيعة أخرى؟

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

لدي حوالي 40 مستخدمًا و 150 منشورًا. يستخدم النظام 1.8 جيجابايت من الذاكرة وقد أعطيته 6 جيجابايت من الذاكرة. ما مقدار الذاكرة المطلوبة لكي تعمل عملية إعادة البناء؟ لقد كان ذلك دائمًا كافيًا في الماضي.

لا أستخدم أي إضافات.

هل يمكنك مشاركة ملف app.yml الخاص بك؟ أخشى أن لديك مفتاح API غير صالح لـ MaxMind.

إعجاب واحد (1)
## هذا هو قالب حاوية Discourse المستقل والمتكامل
##
## بعد إجراء تغييرات على هذا الملف، يجب عليك إعادة البناء
## /var/discourse/launcher rebuild app
##
## كن حذرًا جدًا عند التحرير!
## ملفات YAML حساسة للغاية للأخطاء في المسافات البيضاء أو المحاذاة!
## قم بزيارة http://www.yamllint.com/ للتحقق من صحة هذا الملف حسب الحاجة

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## قم بإلغاء التعليق على هذين السطرين إذا كنت ترغب في إضافة Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

## ما هي منافذ TCP/IP التي يجب أن تعرضها هذه الحاوية؟
## إذا كنت تريد أن تشارك Discourse منفذًا مع خادم ويب آخر مثل Apache أو nginx،
## انظر https://meta.discourse.org/t/17247 للحصول على التفاصيل
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## قم بتعيين db_shared_buffers إلى حد أقصى 25٪ من إجمالي الذاكرة.
  ## سيتم تعيينه تلقائيًا بواسطة bootstrap بناءً على الذاكرة العشوائية المكتشفة، أو يمكنك إلغاء الأمر
  db_shared_buffers: "4096MB"

  ## يمكن أن يحسن أداء الفرز، ولكنه يضيف استخدام الذاكرة لكل اتصال
  #db_work_mem: "40MB"

  ## أي مراجعة Git يجب أن تستخدمها هذه الحاوية؟ (الافتراضي: tests-passed)
  #version: tests-passed

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## كم عدد طلبات الويب المتزامنة التي يمكن دعمها؟ يعتمد على الذاكرة وأنوى المعالج.
  ## سيتم تعيينه تلقائيًا بواسطة bootstrap بناءً على وحدات المعالجة المركزية المكتشفة، أو يمكنك إلغاء الأمر
  UNICORN_WORKERS: 8

  ## TODO: اسم النطاق الذي ستستجيب له مثيل Discourse هذا
  ## مطلوب. لن يعمل Discourse برقم IP عارٍ.
  DISCOURSE_HOSTNAME: discussion.scottibyte.com

  ## قم بإلغاء التعليق إذا كنت تريد بدء تشغيل الحاوية بنفس
  ## اسم المضيف (-h option) كما هو محدد أعلاه (الافتراضي "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: قائمة بالبريد الإلكتروني مفصولة بفواصل ستصبح مسؤولاً ومطورًا
  ## عند التسجيل الأولي مثال 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'aaaaaa@gmail.com'

  ## TODO: خادم البريد SMTP المستخدم للتحقق من الحسابات الجديدة وإرسال الإشعارات
  # مطلوب عنوان SMTP واسم المستخدم وكلمة المرور
  # تحذير الحرف '#' في كلمة مرور SMTP يمكن أن يسبب مشاكل!
  DISCOURSE_SMTP_ADDRESS: smtp.gmail.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: redacted
  DISCOURSE_SMTP_PASSWORD: redacted
  DISCOURSE_SMTP_ENABLE_START_TLS: true           # (اختياري، الافتراضي صحيح)
  DISCOURSE_SMTP_DOMAIN: discussion.scottibyte.com
  DISCOURSE_NOTIFICATION_EMAIL: noreply@scottibyte.com

  ## إذا أضفت قالب Lets Encrypt، قم بإلغاء التعليق أدناه للحصول على شهادة SSL مجانية
  LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

  ## عنوان CDN HTTP أو HTTPS لمثيل Discourse هذا (تم تكوينه للسحب)
  ## انظر https://meta.discourse.org/t/14857 للحصول على التفاصيل
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
  
  ## مفتاح عنوان IP الخاص بـ MaxMind لتحديد الموقع الجغرافي لعنوان IP
  ## انظر https://meta.discourse.org/t/-/137387/23 للحصول على التفاصيل
  DISCOURSE_MAXMIND_LICENSE_KEY: aaaaaaaa

## حاوية Docker عديمة الحالة؛ يتم تخزين جميع البيانات في /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## الإضافات تذهب هنا
## انظر https://meta.discourse.org/t/19157 للحصول على التفاصيل
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

## أي أوامر مخصصة لتشغيلها بعد البناء
run:
  - exec: echo "Beginning of custom commands"
  ## إذا كنت تريد تعيين عنوان البريد الإلكتروني 'من' لتسجيلك الأول، قم بإلغاء التعليق والتغيير:
  ## بعد الحصول على البريد الإلكتروني الأول للتسجيل، أعد التعليق على السطر. يحتاج فقط إلى التشغيل مرة واحدة.
  # - exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "End of custom commands"

عندما قمت ببناء جديد، جربت مفتاح Maxmind جديدًا وحصلت على نفس الخطأ.

احذف أو علّق السطر الذي يحتوي على DISCOURSE_MAXMIND_LICENSE_KEY وأعد البناء.

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

وإذا كان ذلك يساعد. كل شيء يعمل بشكل جيد الآن. التحديثات هي ما يسبب المشاكل.

تم التعليق على مفتاح Maxmind في ملف YAML. إعادة البناء قيد التنفيذ. بالمناسبة، لطالما عملت الإشعارات عبر البريد الإلكتروني بشكل جيد. مؤخرًا، لم يعد البريد الإلكتروني الخاص برابط تنزيل النسخة الاحتياطية يعمل. ببساطة أذهب إلى المجلد وأقوم بتنزيل النسخة الاحتياطية عبر sftp وهذا يعمل ويكتمل سجل النسخ الاحتياطي بنجاح. إذن، ما رأيك في مشكلة مفتاح Maxmind؟

@Falco حسنًا، يبدو أن مفتاح Maxmind كان هو السبب.


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

إذًا، حتى مع مفتاح Maxmind جديد، لم أوفق. أي نصيحة بشأن ذلك؟

3 إعجابات

إذًا، هل سيؤدي المفتاح غير الصالح إلى فشل البناء، بينما لن يؤدي المفتاح الفارغ إلى ذلك؟

إعجابَين (2)

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

إعجابَين (2)

كل ما فعلته هو التعليق على المفتاح وتم إصلاح إعادة البناء بشكل مثالي. مع مفتاح صالح (وحتى مفتاح جديد) ، فشلت إعادة البناء مع السجلات التي قدمتها.

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