البرمجة

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

كيفية نشر تطبيق Ruby on Rails باستخدام AZK: دليل شامل

تُعد عملية نشر تطبيقات الويب خطوة محورية في دورة حياة تطوير البرمجيات، وتكتسب أهمية خاصة عندما يتعلق الأمر بتطبيقات Ruby on Rails لما تتطلبه من تهيئة بيئة مناسبة تشمل قواعد بيانات، إعداد خوادم، وربط الحزم المختلفة. من بين الأدوات المتقدمة التي تُمكِّن المطورين من إنشاء بيئة محلية قابلة للتوسعة وتحاكي بيئة الإنتاج بدرجة كبيرة، تبرز أداة AZK كخيار قوي وفعال.

AZK (اختصارًا لـ “Automation of system containers”) هي أداة مفتوحة المصدر تُستخدم لأتمتة إعداد وتنسيق الحاويات (containers) بشكل سهل وقابل للتكرار، ما يجعلها مثالية لتطبيقات Rails، خاصةً في بيئات الفرق متعددة المطورين أو عند الرغبة في محاكاة بيئة الإنتاج بدقة على جهاز التطوير المحلي.

يستعرض هذا المقال كيفية نشر تطبيق Rails باستخدام AZK بطريقة تفصيلية، تشمل إعداد البيئة، تكوين AZK، تشغيل الحاويات، والتفاعل مع قواعد البيانات والخدمات الخارجية، مع التركيز على أفضل ممارسات DevOps وCI/CD.


أولًا: ما هو AZK ولماذا يُستخدم مع Rails؟

AZK هي منصة لإدارة حاويات التطبيقات تُسهّل تشغيل بيئات تطوير محلية متعددة باستخدام ملفات تكوين بسيطة مشابهة لفكرة docker-compose. توفر:

  • إمكانية تشغيل خدمات متعددة بسهولة (مثل قواعد البيانات، Redis، Memcached).

  • إدارة العزلة بين التطبيقات.

  • محاكاة بيئة الإنتاج.

  • تكامل سلس مع Docker وVirtualBox.

بالنسبة لتطبيقات Rails التي تعتمد على أكثر من مكون (مثل PostgreSQL, Redis, Sidekiq)، فإن AZK توفّر طريقة متماسكة لتهيئة البيئة وتشغيلها بكفاءة، دون الاضطرار لتثبيت كل خدمة على نظام التشغيل المضيف.


ثانياً: المتطلبات الأولية

قبل البدء، يجب التأكد من توفر المتطلبات التالية:

الأداة الوصف
Node.js مطلوب لتثبيت AZK
NPM يأتي عادةً مع Node.js
Docker AZK يستخدم Docker في الخلفية
VirtualBox إذا لم يكن Docker يعمل مباشرة على النظام
AZK CLI لتشغيل وإدارة الحاويات
Git لسحب مستودع Rails إن لم يكن محليًا

يمكن تثبيت AZK عبر:

bash
npm install -g azk

ثم التأكد من التثبيت:

bash
azk version

ثالثاً: إعداد تطبيق Rails

لنفترض أن لديك تطبيق Rails جاهز. يمكنك تهيئة AZK عبر إنشاء ملف Azkfile.js في جذر المشروع. هذا الملف يُشبه Dockerfile أو docker-compose.yml من حيث الدور.

مثال لبنية تطبيق Rails:

arduino
my-rails-app/ ├── app/ ├── config/ ├── db/ ├── Gemfile ├── Gemfile.lock ├── Azkfile.js └── ...

رابعاً: إنشاء وتكوين Azkfile.js

ملف Azkfile.js هو الملف الرئيسي الذي يصف الخدمات التي يحتاجها تطبيقك (Rails، قاعدة البيانات، Redis، إلخ).

نموذج Azkfile.js لتطبيق Rails:

javascript
systems({ rails: { depends: ["postgres", "redis"], image: { docker: "ruby:2.7" }, provision: [ "bundle install", "bundle exec rake db:create db:migrate" ], workdir: "/azk/#{manifest.dir}", mount_folders: { ".": "/azk/#{manifest.dir}", }, shell: "/bin/bash", command: "bundle exec rails s -b 0.0.0.0", scalable: { default: 1 }, http: { domains: ["#{system.name}.#{azk.default_domain}"] }, envs: { RACK_ENV: "development", RAILS_ENV: "development", DATABASE_URL: "postgres://postgres:@postgres:5432/myapp_development", REDIS_URL: "redis://redis:6379" } }, postgres: { image: { docker: "postgres:13" }, envs: { POSTGRES_USER: "postgres", POSTGRES_PASSWORD: "", POSTGRES_DB: "myapp_development" }, export_envs: { DATABASE_URL: "postgres://postgres:@#{net.host}:#{net.port}/myapp_development" } }, redis: { image: { docker: "redis:6" }, export_envs: { REDIS_URL: "redis://#{net.host}:#{net.port}" } } });

خامساً: شرح مكونات Azkfile.js

1. قسم rails

هذا يمثل التطبيق الرئيسي، ويحتوي على:

  • depends: يحدد الخدمات الأخرى التي يجب تشغيلها أولاً.

  • image: صورة Docker التي تحتوي على لغة Ruby.

  • provision: أوامر يتم تنفيذها في أول تشغيل.

  • mount_folders: ربط مجلد المشروع داخل الحاوية.

  • command: الأمر الذي يبدأ الخادم.

  • envs: إعدادات البيئة المطلوبة لتشغيل التطبيق.

2. قسم postgres

لتشغيل قاعدة بيانات PostgreSQL، يتم تهيئة اسم المستخدم، كلمة المرور واسم قاعدة البيانات.

3. قسم redis

يهيئ Redis لاستخدامه في الخلفية، مثل جلسات Sidekiq أو ActionCable.


سادساً: تشغيل البيئة باستخدام AZK

بعد إعداد Azkfile.js، يمكن تشغيل الخدمات بالأوامر التالية:

bash
azk start

هذا سيقوم بتشغيل كل الخدمات وفق ترتيب الاعتماديات، بدءًا بـ postgres، ثم redis، ثم rails.

لرؤية سجل الحاويات وتشخيص المشكلات:

bash
azk logs

وإذا أردت الدخول إلى الحاوية:

bash
azk shell rails

لإعادة تشغيل الخدمات:

bash
azk restart

سابعاً: التعامل مع قواعد البيانات

من داخل الحاوية الخاصة بـ Rails، يمكن إدارة قواعد البيانات كالمعتاد:

bash
bundle exec rake db:create bundle exec rake db:migrate

يمكنك أيضًا استخدام psql من داخل الحاوية الخاصة بـ postgres للتفاعل مع قاعدة البيانات مباشرة:

bash
azk shell postgres psql -U postgres -d myapp_development

ثامناً: دمج AZK مع أنظمة CI/CD

استخدام AZK لا يقتصر على تطوير محلي فقط، بل يمكن دمجه في أنظمة تكامل مستمر مثل GitLab CI, GitHub Actions أو CircleCI.

مثال تكوين بسيط مع GitLab CI:

yaml
image: ruby:2.7 services: - postgres:13 - redis:6 before_script: - apt-get update -qq && apt-get install -y nodejs npm - npm install -g azk - azk start - bundle install test: script: - bundle exec rspec

هذا يضمن أن نفس البيئة التي تم إعدادها عبر Azkfile.js يتم تكرارها في بيئة CI، مما يقلل من مشكلات “يعمل عندي”.


تاسعاً: استكشاف الأخطاء الشائعة

الخطأ السبب الحل
pg: connection refused قاعدة البيانات لم تبدأ تحقق من ترتيب التشغيل
bundle: command not found لم يتم تثبيت Bundler gem install bundler داخل الحاوية
rails s: address already in use المنفذ محجوز غيّر المنفذ في Azkfile.js
azk not recognized لم يتم تثبيت AZK بشكل صحيح تأكد من توافره في $PATH

عاشراً: مزايا استخدام AZK مع تطبيقات Rails

  • تحسين التناسق: يقلل من الاختلافات بين بيئات التطوير.

  • السرعة: يتم تشغيل كل المكونات عبر أمر واحد.

  • قابلية التوسع: يمكن إدارة أكثر من تطبيق وخدمة بسهولة.

  • تكامل مع Docker: الاستفادة من عزل الحاويات والتحكم الدقيق في الإعدادات.

  • سهولة المشاركة: ملف Azkfile.js يُمثل توثيقًا حيًا للبيئة.


خاتمة

يمثل استخدام AZK في نشر تطبيقات Ruby on Rails نقلة نوعية في إدارة البيئات وتشغيلها، حيث يوفّر بيئة مرنة وقابلة للتوسع تشبه بيئة الإنتاج بشكل كبير. يساعد هذا في تقليل الأخطاء الناتجة عن اختلاف بيئات التشغيل، كما يسهّل على الفرق التعاونية العمل على مشروع واحد باستخدام إعداد موحد. ويمنح AZK المطورين أدوات قوية لإدارة الحاويات، قواعد البيانات والخدمات بطريقة تجعل من بيئة التطوير بيئة مرنة وآمنة وسهلة الإدارة.


المصادر والمراجع:

  1. https://docs.azk.io – الوثائق الرسمية لـ AZK

  2. https://guides.rubyonrails.org – الوثائق الرسمية لـ Ruby on Rails