لتحقيق إعادة تشغيل تطبيق Rails الخاص بك باستخدام Puma عند إعادة تشغيل النظام أو في حالة توقف الخادم، يجب عليك ضبط ملف الخدمة systemd الخاص بـ Puma بشكل صحيح. وفقًا للمعلومات التي قدمتها، يبدو أن السبب في عدم نجاح الإعادة التلقائية لتشغيل Puma هو أن ملف الخدمة الخاص بـ systemd الذي أنشأته لا يحتوي على الإعدادات الصحيحة.
يبدو أنك استخدمت القيمة Type=simple
في ملف الخدمة، وهذا يعني أن systemd يتوقع أن العملية التي تقوم بتشغيلها (Puma) ستبدأ وتعمل في الخلفية. ولكن، يبدو أن Puma يبدأ عملية daemon بناءً على الأمر الذي تم توضيحه من خلال Capistrano. لذلك، يجب تغيير القيمة Type
إلى forking
لتعطيل التشغيل البسيط وتمكين التشغيل كعملية تفرع.
بالإضافة إلى ذلك، يجب أن يتضمن ملف الخدمة تعليمات User
و Group
لتحديد المستخدم والمجموعة التي سيتم تشغيل Puma بها، مثلما تفعل Capistrano.
قم بتحرير ملف الخدمة الخاص بـ Puma (puma.service
) ليبدو مثل الكود التالي:
ini[Unit]
Description=Puma HTTP Server
After=network.target
[Service]
Type=forking
User=my-user
Group=my-user
WorkingDirectory=/home/my-user/apps/MyApp/current
ExecStart=/home/my-user/.rvm/bin/rvm default do bundle exec puma -C /home/my-user/apps/MyApp/shared/puma.rb --daemon
Restart=always
[Install]
WantedBy=multi-user.target
بعد تعديل ملف الخدمة، قم بإعادة تحميل تكوينات systemd وإعادة تشغيل الخدمة باستخدام الأوامر التالية:
bashsudo systemctl daemon-reload sudo systemctl restart puma.service
بعد ذلك، يجب أن يتم تشغيل Puma تلقائيًا عند إعادة تشغيل النظام وبعد أي توقف غير متوقع.
المزيد من المعلومات
بالطبع! إليك بعض المعلومات الإضافية التي قد تفيدك في تكوين خدمة systemd لـ Puma:
-
تحديد بيئة التشغيل: قد تحتاج إلى تحديد بيئة التشغيل لـ Puma في ملف الخدمة باستخدام متغير البيئة
RAILS_ENV
. يمكنك إضافة السطر التالي في قسم[Service]
:iniEnvironment=RAILS_ENV=production
-
تحديد ملف تكوين Puma: تأكد من أن مسار ملف تكوين Puma المحدد في السطر
ExecStart
صحيح. يجب أن يكون هذا الملف يحتوي على جميع الإعدادات اللازمة لتشغيل Puma بشكل صحيح. -
تحديد مستخدم التشغيل: استخدم مستخدمًا غير الجذر (non-root user) لتشغيل Puma لأسباب أمانية. تأكد من أن مستخدم الخدمة (
User
وGroup
) لديه الصلاحيات الكافية للوصول إلى الملفات والمجلدات اللازمة لتشغيل التطبيق. -
تسجيل الأخطاء: قم بتحديد مكان تسجيل الأخطاء والإخراج القياسي لـ Puma في ملف الخدمة. يمكنك استخدام الخيارات
-e
و-o
مع الأمرExecStart
لتحديد ملفات السجل المناسبة. -
التحقق من حالة الخدمة: للتحقق من حالة الخدمة والحصول على مزيد من المعلومات حول الأخطاء، استخدم الأمر التالي:
bashsystemctl status puma.service
-
التحقق من سجل النظام: قم بفحص سجل النظام (
syslog
) أو سجل الخدمة (journalctl
) للحصول على معلومات إضافية حول سبب فشل بدء تشغيل Puma.
بعد تعديل ملف الخدمة وتطبيق التغييرات، قم بإعادة تحميل تكوينات systemd وإعادة تشغيل الخدمة باستخدام الأوامر التالية:
bashsudo systemctl daemon-reload sudo systemctl restart puma.service
هذه الإجراءات يجب أن تساعدك في إعادة تشغيل تطبيقك Rails بنجاح باستخدام Puma وخدمة systemd.