كيفية نشر تطبيق 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 عبر:
bashnpm install -g azk
ثم التأكد من التثبيت:
bashazk version
ثالثاً: إعداد تطبيق Rails
لنفترض أن لديك تطبيق Rails جاهز. يمكنك تهيئة AZK عبر إنشاء ملف Azkfile.js في جذر المشروع. هذا الملف يُشبه Dockerfile أو docker-compose.yml من حيث الدور.
مثال لبنية تطبيق Rails:
arduinomy-rails-app/ ├── app/ ├── config/ ├── db/ ├── Gemfile ├── Gemfile.lock ├── Azkfile.js └── ...
رابعاً: إنشاء وتكوين Azkfile.js
ملف Azkfile.js هو الملف الرئيسي الذي يصف الخدمات التي يحتاجها تطبيقك (Rails، قاعدة البيانات، Redis، إلخ).
نموذج Azkfile.js لتطبيق Rails:
javascriptsystems({
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، يمكن تشغيل الخدمات بالأوامر التالية:
bashazk start
هذا سيقوم بتشغيل كل الخدمات وفق ترتيب الاعتماديات، بدءًا بـ postgres، ثم redis، ثم rails.
لرؤية سجل الحاويات وتشخيص المشكلات:
bashazk logs
وإذا أردت الدخول إلى الحاوية:
bashazk shell rails
لإعادة تشغيل الخدمات:
bashazk restart
سابعاً: التعامل مع قواعد البيانات
من داخل الحاوية الخاصة بـ Rails، يمكن إدارة قواعد البيانات كالمعتاد:
bashbundle exec rake db:create
bundle exec rake db:migrate
يمكنك أيضًا استخدام psql من داخل الحاوية الخاصة بـ postgres للتفاعل مع قاعدة البيانات مباشرة:
bashazk shell postgres psql -U postgres -d myapp_development
ثامناً: دمج AZK مع أنظمة CI/CD
استخدام AZK لا يقتصر على تطوير محلي فقط، بل يمكن دمجه في أنظمة تكامل مستمر مثل GitLab CI, GitHub Actions أو CircleCI.
مثال تكوين بسيط مع GitLab CI:
yamlimage: 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 المطورين أدوات قوية لإدارة الحاويات، قواعد البيانات والخدمات بطريقة تجعل من بيئة التطوير بيئة مرنة وآمنة وسهلة الإدارة.
المصادر والمراجع:
-
https://docs.azk.io – الوثائق الرسمية لـ AZK
-
https://guides.rubyonrails.org – الوثائق الرسمية لـ Ruby on Rails

