ديف أوبس

نشر تطبيقات Rails باستخدام Git Hooks

نشر تطبيقات Rails بواسطة Git Hooks على أوبونتو 14.04

مقدمة

تعد عملية نشر تطبيقات الويب الحديثة أحد التحديات الأساسية التي يواجهها المطورون، ولا سيما عند استخدام أطر عمل مثل Rails على خوادم Ubuntu 14.04. من أجل تسهيل هذه العملية وجعلها أكثر أتمتة، يقدم Git العديد من الأدوات المساعدة التي يمكن دمجها مع سير العمل اليومي. من بين هذه الأدوات، يعتبر Git Hooks أحد الحلول المثلى التي تسمح بتشغيل أوامر معينة عند تنفيذ إجراءات محددة في مستودع Git.

ما هو Git Hook؟

Git Hooks هي آلية تمكن المطورين من أتمتة العمليات داخل مستودعات Git. يمكن أن يتم استخدام Git Hooks لتنفيذ أوامر مخصصة على مستوى المرحلة المحلية للمطور أو عند التفاعل مع المستودع. توجد عدة أنواع من Git Hooks يمكن استخدامها في مراحل مختلفة من عملية التطوير مثل قبل commit (pre-commit)، بعد الدفع (post-push)، أو قبل الدفع (pre-push).

لماذا Git Hooks؟

تتمثل الفائدة الرئيسية لاستخدام Git Hooks في أتمتة العديد من المهام التي تتطلب تدخلاً يدوياً، مثل:

  • نشر التحديثات تلقائيًا على الخادم بعد دفع الكود.

  • تشغيل اختبارات التغطية أو الأمان قبل إرسال الكود إلى الخادم.

  • إعادة تشغيل تطبيق Rails بعد التحديثات.

  • إرسال إشعارات تلقائية عند حدوث أخطاء أو نجاح عمليات النشر.

إعداد Git Hooks في بيئة Ubuntu 14.04

في هذه المقالة، سنقوم بإعداد Git Hooks على خادم Ubuntu 14.04 لنشر تطبيقات Rails. سيتم ذلك باستخدام git push لتنفيذ عملية نشر تطبيق Rails تلقائيًا بعد أي تغيير يتم دفعه إلى المستودع.

1. تثبيت البيئة الأساسية

أول خطوة في إعداد بيئة نشر هو التأكد من أن الخادم يحتوي على كافة المتطلبات الأساسية.

1.1 تثبيت Ruby و Rails

يجب تثبيت Ruby و Rails على الخادم. يمكن القيام بذلك عبر الخطوات التالية:

bash
sudo apt-get update sudo apt-get install ruby-full sudo gem install rails
1.2 تثبيت Git

يتعين أن يكون Git مثبتًا على الخادم. قم بتثبيته باستخدام الأمر التالي:

bash
sudo apt-get install git
1.3 إعداد قاعدة بيانات

إذا كان تطبيق Rails الخاص بك يعتمد على قاعدة بيانات مثل PostgreSQL أو MySQL، تأكد من تثبيت هذه الخدمات على الخادم.

bash
sudo apt-get install postgresql postgresql-contrib

2. إعداد Git Hooks

2.1 استخدام Git Hooks في مستودع Git

Git Hooks هي نصوص تُنفذ تلقائيًا عند حدوث أحداث معينة في Git. هذه النصوص يتم تخزينها في مجلد .git/hooks في المستودع المحلي.

2.2 إعداد Git Hook لنشر التحديثات

لنفترض أن تطبيق Rails الخاص بك يحتوي على مستودع Git محلي مرتبط بمستودع عن بعد على GitHub أو GitLab. يمكننا إعداد Git Hook للقيام بنشر التحديثات تلقائيًا عند الدفع إلى المستودع عن بعد.

أولاً، نحتاج إلى الانتقال إلى مجلد المستودع المحلي الخاص بتطبيق Rails:

bash
cd /path/to/your/rails/app

ثم ننتقل إلى مجلد Git hooks داخل المستودع:

bash
cd .git/hooks
2.3 إعداد Hook للدفع

الآن، سنقوم بإعداد post-receive hook ليتم تشغيله بعد دفع التحديثات إلى المستودع عن بعد. يتم ذلك عن طريق تعديل أو إنشاء ملف post-receive في المجلد .git/hooks/ على الخادم الذي سيستقبل التحديثات.

قم بإنشاء أو تحرير الملف post-receive في المجلد .git/hooks/:

bash
nano post-receive

في هذا الملف، نحتاج إلى إضافة النص التالي:

bash
#!/bin/sh GIT_WORK_TREE=/path/to/your/rails/app git checkout -f cd /path/to/your/rails/app bundle install rails db:migrate RAILS_ENV=production touch tmp/restart.txt

شرح الأوامر:

  • GIT_WORK_TREE=/path/to/your/rails/app git checkout -f: هذا الأمر يقوم بتحديث شجرة العمل على الخادم لتكون متوافقة مع آخر التحديثات في المستودع.

  • cd /path/to/your/rails/app: ينتقل إلى دليل تطبيق Rails.

  • bundle install: يقوم بتثبيت أو تحديث الجواهر (gems) المطلوبة من Gemfile.

  • rails db:migrate RAILS_ENV=production: يقوم بتشغيل الترحيلات (migrations) لتحديث قاعدة البيانات في بيئة الإنتاج.

  • touch tmp/restart.txt: يقوم بإعادة تشغيل تطبيق Rails على الخادم.

بعد تعديل الملف، يجب أن نمنح الملف أذونات التنفيذ:

bash
chmod +x post-receive
2.4 اختبار إعدادات Git Hook

الآن بعد أن قمت بإعداد Git Hook، يمكنك اختبار إعداداتك عن طريق دفع التحديثات إلى المستودع عن بعد. بعد الدفع، يجب أن يتم تنفيذ السكربت post-receive تلقائيًا على الخادم، مما يؤدي إلى نشر التحديثات على تطبيق Rails.

bash
git push origin master

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

3. إعداد إشعارات أو سجلات

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

3.1 إضافة إشعارات بالبريد الإلكتروني

يمكنك إضافة سطر إلى post-receive hook لإرسال إشعارات بالبريد الإلكتروني بعد نشر التحديثات.

bash
echo "Deployment completed successfully" | mail -s "Deployment Notification" [email protected]
3.2 استخدام سجلات الأخطاء

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

bash
#!/bin/sh GIT_WORK_TREE=/path/to/your/rails/app git checkout -f cd /path/to/your/rails/app bundle install >> /var/log/deployment.log 2>&1 rails db:migrate RAILS_ENV=production >> /var/log/deployment.log 2>&1 touch tmp/restart.txt

الآن، يمكن لمطوري النظام أو مدير الخادم مراجعة هذا السجل للتأكد من أنه لا يوجد أي خطأ أثناء عملية النشر.

4. تحسينات إضافية

4.1 استخدام Capistrano

Capistrano هو أحد الأدوات الشهيرة التي تُستخدم لأتمتة نشر تطبيقات Rails. يمكن دمج Capistrano مع Git Hooks لأتمتة عمليات النشر بشكل أكثر سلاسة وأمانًا.

4.2 استراتيجيات نشر مرنة

يُفضل أن تستخدم استراتيجيات نشر مرنة مثل Blue-Green Deployment أو Rolling Deployment لضمان عدم انقطاع الخدمة أثناء النشر.

الخاتمة

إن استخدام Git Hooks لنشر تطبيقات Rails على خوادم Ubuntu 14.04 يمكن أن يكون حلاً فعالًا وسريعًا لأتمتة العديد من المهام، من التحديثات التلقائية إلى تشغيل الأوامر الخاصة بقاعدة البيانات وتحديث الجواهر. من خلال أتمتة هذه المهام باستخدام Git Hooks، يمكن تحسين الإنتاجية وتوفير الوقت والجهد للمطورين والمشرفين على الأنظمة.