شروحات تقنية 14 دقيقة قراءة

تحديث ERPNext v15: كل أمر بيعمل إيه وفين الكارثة بتحصل

تحديثات ERPNext تقع في ثلاث فئات، كل منها لها مستوى مخاطرة مختلف تماما. الفئة 1: تحديثات صغيرة (v15.22 → v15.26) — مخاطرة منخفضة، بتنتهي في ١٥ دقيقة. الفئة 2: ترقية إصدار كبرى (v14 → v15) — مخاطرة عالية، بتحتاج بيئة اختبار، خطط لـ 4-8 ساعات. الفئة 3: تحديث إطار العمل (تغييرات Frappe الأساسية) — مخاطرة متوسطة، اتبع نفس عملية التحديثات الصغيرة لكن اقرأ ملاحظات الإصدار أولا. أغلى خطأ يرتكبه المطورون هو معاملة ترقية إصدار كبرى كتحديث صغير.

القاعدة الذهبية: النسخة الاحتياطية قبل التحديث هي بوليصة التأمين

التحديث هو اللي بيكسر معظم نسخ ERPNext المسطبة يدوي. على مانجلي التحديث بيتجرب الأول على نسخة من بياناتك، ولو حصلت أي مشكلة بيرجع لورا لوحده.

بلاش bench update تاني
مفيش نقاش: اعمل ده قبل أي تحديث

أي تحديث لازم يبدأ بنسخة احتياطية إنت متأكد منها. مش نسخة إنت فاكر إنها موجودة — نسخة خدتها دلوقتي وشفت ملفها على القرص بعينك. تحديث واحد بايظ من غير نسخة = بياناتك راحت للأبد. مفيش زرار 'تراجع' في قاعدة البيانات.

bash
# خذ نسخة احتياطية كاملة قبل كل تحديث (شغل كمستخدم frappe)
cd ~/frappe-bench
bench --site mycompany.com backup --with-files

# تأكد أن ملف النسخة موجود فعلا وله محتوى
ls -lh sites/mycompany.com/private/backups/
# المفروض تشوف ملف .sql.gz أنشئ في آخر دقيقتين
# المفروض يكون أكبر من 1 كيلوبايت — الملف بحجم 0 = النسخ فشل

# احتفظ باسم الملف الدقيق للاستخدام في التراجع لو لزم
ls -t sites/mycompany.com/private/backups/*.sql.gz | head -1

انسخ النسخة الاحتياطية لمكان خارجي قبل البدء في التحديث:

bash
# نسخ لسيرفر آخر عبر SCP
scp sites/mycompany.com/private/backups/*.sql.gz user@backup-server:/backups/

# أو رفع إلى S3 (لو كان AWS CLI مهيأ)
aws s3 cp sites/mycompany.com/private/backups/*.sql.gz s3://your-backup-bucket/erpnext/

السيناريو أ: تحديث صغير (v15.x → v15.y) — مخاطرة منخفضة، ١٥ دقيقة

التحديثات الصغيرة بتصلح أخطاء ومشاكل أمنية جوه نفس النسخة الرئيسية، ونادرا ما بتكسر حاجة شغالة. ده التحديث اللي هتشغله أكتر حاجة — أسبوعيا أو كل أسبوعين.

ما اللي بيحدث عند تشغيل 'bench update': (1) Git يسحب أحدث commits لكل التطبيقات المثبتة، (٢) بتحدث تبعيات Python لو بتغير requirements.txt، (3) سكربتات ترحيل قاعدة البيانات بتعمل لو وجدت تغييرات في المخطط، (٤) أصول JavaScript/CSS تعاد بناؤها.

bash
# الخطوة 1: خذ نسخة احتياطية (مغطاة أعلاه)

# الخطوة 2: تحقق من الإصدار الحالي
bench version
# سجل ده — ستحتاجه للتراجع لو فشل شيء

# الخطوة 3: شغل التحديث
bench update --pull

# لو أردت تشغيل الترحيل بشكل منفصل (أأمن لقواعد البيانات الكبيرة):
bench update --pull --skip-migrate
bench --site mycompany.com migrate  # شغل الترحيل أثناء مراقبته

# الخطوة 4: أعد تشغيل كل الخدمات لتحميل الكود الجديد
bench restart

# الخطوة 5: تحقق من نجاح التحديث
bench version  # المفروض يظهر أرقام الإصدار الجديدة
bench --site mycompany.com doctor  # يتحقق من أي تناقضات
كيف بتعرف أن التحديث نجح

بعد إعادة التشغيل: سجل دخولا لـ ERPNext، افتح فاتورة مبيعات وأمر شراء، تحقق من تحميل لوحة التحكم. لو بدا أي شيء مكسورا أو رمى خطأ، انتقل لخطوات التراجع فورا.

السيناريو ب: ترقية إصدار كبرى (v14 → v15) — مخاطرة عالية، استخدم بيئة اختبار

ما تعملش ده على الإنتاج قبل ما تجربه على نسخة مطابقة

الترقية من v14 لـ v15 بتغير هياكل جداول قاعدة البيانات (ترحيلات المخطط)، وبتشيل APIs مهجورة ممكن كودك المخصص يكون بيستخدمها، وممكن تكسر قوالب الطباعة والحقول المخصصة. الاختبار على بيئة staging بنسخة من بياناتك الحقيقية مش اختياري — ده اللي هيوريك إيه اللي هيتكسر قبل ما يتكسر عند العملاء.

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

bash
# على سيرفر الاختبار (مش الإنتاج!)
# كرر التثبيت الكامل من دليل التثبيت أولا
# ثم استعد نسخة الإنتاج على موقع الاختبار:

bench new-site staging.mycompany.com \
  --mariadb-root-password DB_PASSWORD \
  --admin-password ADMIN_PASSWORD

# استعد نسخة قاعدة بيانات الإنتاج على الاختبار
bench --site staging.mycompany.com restore \
  /path/to/your-production-backup.sql.gz

الخطوة 2: حول بيئة الاختبار إلى v15 واختبر الترقية:

bash
# حول كل التطبيقات لفرع v15
bench switch-to-branch version-15 frappe erpnext hrms

# حدث وشغل الترحيلات
bench update --pull

# لو ظهرت أخطاء أثناء الترحيل، ستظهر هنا على الاختبار
# ده بالضبط سبب الاختبار هنا أولا

الخطوة ٣: جرب الوظايف الحرجة دي على بيئة الاختبار قبل ما تلمس الإنتاج: (١) سجل دخول وشوف لوحة التحكم بتحمل من غير أخطاء JavaScript — افتح كونسول المتصفح (F12) ودور على الأخطاء الحمرا. (٢) افتح فاتورة مبيعات قديمة من قبل الترقية وشوف كل الحقول ظاهرة وصح. (٣) اعمل فاتورة مبيعات تجريبية جديدة وأرسلها وشوف بترحل صح. (٤) شغل تقرير ميزان المراجعة للشهر اللي فات وطابق أرقامه على اللي كان قبل الترقية. (٥) افتح أي قالب طباعة مخصص عندك وشوف بيتعرض صح. (٦) لو عندك فوترة إلكترونية (ETA/ZATCA)، جرب ترسل فاتورة اختبار. (٧) لو شغلك بيستخدم نقاط البيع (POS)، جربها.

الخطوة 4: لو نجحت كل الاختبارات على بيئة الاختبار، طبق على الإنتاج خلال نافذة صيانة (ساعات قليلة الحركة):

bash
# على سيرفر الإنتاج
# جدول نافذة صيانة (مثلا: 2 ص الجمعة)

# 1. خذ نسخة احتياطية نهائية مباشرة قبل الترقية
bench --site mycompany.com backup --with-files

# 2. ضع الموقع في وضع الصيانة
bench --site mycompany.com set-maintenance-mode on

# 3. حول لفروع v15
bench switch-to-branch version-15 frappe erpnext hrms

# 4. اسحب الكود وشغل الترحيلات
bench update --pull

# 5. أعد بناء الأصول للإصدار الجديد
bench build --production

# 6. أعد تشغيل الخدمات
bench restart

# 7. عطل وضع الصيانة
bench --site mycompany.com set-maintenance-mode off

# 8. تحقق أن كل شيء بيعمل
bench version
bench --site mycompany.com doctor

السيناريو ج: التراجع بعد تحديث فاشل — كيف تتراجع في حالة طوارئ

لو التحديث فشل وموقعك اتكسر، ده الطريق للرجوع لحالة شغالة. السرعة هنا فارقة — كل دقيقة النظام واقف فيها بتكلفك شغل. حط القسم ده في المفضلة.

bash
# الخطوة 1: أوقف كل الخدمات فورا
sudo supervisorctl stop all

# الخطوة 2: حول كل التطبيقات للفرع السابق
# لو كنت على v15 وتترقى لـ v16:
bench switch-to-branch version-15 frappe erpnext hrms

# لو كنت على v14 وتترقى لـ v15:
bench switch-to-branch version-14 frappe erpnext hrms

# الخطوة 3: استعد قاعدة البيانات من النسخة الاحتياطية
# استبدل اسم الملف بالملف الفعلي اللي رأيته في 'ls' سابقا
bench --site mycompany.com restore \
  sites/mycompany.com/private/backups/20260405_020000-mycompany_com-database.sql.gz

# الخطوة 4: أعد بناء الأصول للإصدار القديم
bench build

# الخطوة 5: ابدأ الخدمات
sudo supervisorctl start all

# الخطوة 6: اختبر الموقع بيعمل
bench --site mycompany.com doctor
تحذير فقدان البيانات عند التراجع

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

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

شوف التحديث بيشتغل ازاي

كيف تتحقق مما تغير قبل التحديث (اقرأ ملاحظات الإصدار كمهندس DevOps)

قبل أي تحديث، خد ٥ دقايق واقرا ملاحظات الإصدار. هي اللي هتقولك لو التحديث بيغير حاجة إنت معتمد عليها.

bash
# اعرض ما هي الـ commits القادمة قبل سحبها
git -C apps/erpnext log --oneline HEAD..origin/version-15 | head -20
git -C apps/frappe log --oneline HEAD..origin/version-15 | head -20

# تحقق لو كانت ملفات ترحيل موجودة (تغييرات المخطط = مخاطرة أكبر)
ls apps/erpnext/erpnext/patches/
# ملفات patch جديدة منذ آخر تحديث = سيعدل قاعدة البيانات

ليه الـ SaaS المدار بيتعامل مع ده أحسن

كل اللي فات ده شغل تشغيلي حقيقي لازم مهندس DevOps يعمله صح في كل مرة. على مانجلي كلاود، كل تحديث ERPNext بيتجرب في بيئة sandbox على لقطة من بياناتك الفعلية قبل ما يتطبق. ولما يبقى آمن، بينزل في ساعات الحركة القليلة. وإنت بيوصلك إشعار إن نظامك اتحدث، من غير ما تعمل حاجة.

تحديثات بصفر مخاطرة

مانجلي بيجرب كل تحديث على أنماط بيانات حقيقية قبل النشر. وترقيات النسخ الكبيرة بتترحل وتتراجع وتتطبق من غير ما تعمل إنت أي حاجة. وتحديثات الامتثال الضريبي (ETA وZATCA وFTA) بتنزل في نفس اليوم اللي الحكومات بتطلع فيه متطلبات جديدة.

مسطب ERPNext عندك؟ ابعتلنا الباك أب واحنا نرفعهولك على مانجلي ببلاش. لو ملقتش فرق، خد الباك أب بتاعك وامشي.

انقل نسختك ببلاش

خلي حد تاني يشيل ليلة التحديث ومخاطرها.

تطبيقات المتجر على نفس بياناتك، حسب باقتك.

سيب تعليقك

التعليقات