Puma не запускається після розгортання на Rails 6/7 через Capistrano та Capistrano-Puma

текст перекладу
pic

Може статися, що після успішного розгортання Puma не працює. Якщо ми подивимось у puma.error.log, ми не побачимо ніяких помилок. Але вивчаючи puma.access.log, ми можемо побачити, що веб-сервер постійно аварійно вимикається і намагається перезапуститись знову і знову в нескінченному циклі.

Це наш випадок. І причина може бути дуже неочевидною. Давайте розберемось, як працює гем capistrano-puma.

  1. Уявімо, що у нас є test_app для RoR 6/7
  2. Уявімо, що ми використовуємо гем capistrano-puma 6+
  3. Не має значення, чи слухаємо ми unix socket чи tcp на Puma

Давайте ініціалізуємо Puma-сервіс і розгорнемо test_app на продакшн-сервері.

cap production puma:install  
cap production puma:enable  
cap production deploy

Capistrano Puma в папці ~/.config/systemd/user створить наступну структуру файлів:
- default.target.wants
- test
apppumaproduction.service_

Давайте відкриємо файл сервісу.

[Unit]  
Description=Puma HTTP Server для dme (production)  
Requires=test_app_puma_production.socket  
After=syslog.target network.target  

[Service]  
Type=simple  
WatchdogSec=10  
WorkingDirectory=/home/test_user/test_app/current  
ExecStart=/home/test_user/.rvm/bin/rvm default do bundle exec puma -e development  
ExecReload=/bin/kill -USR1 $MAINPID  
# якщо ми зламаємося, перезапустимо  
RestartSec=1  
Restart=on-failure  
StandardOutput=append:/home/test_user/dme/shared/log/puma.access.log  
StandardError=append:/home/test_user/dme/shared/log/puma.error.log  
SyslogIdentifier=test_app_puma_production  

[Install]  
WantedBy=default.target

Зверніть увагу на WatchdogSec у розділі Service. Цей параметр тайм-ауту використовується сервісом для перевірки, чи активна Puma. Якщо ні — вона буде перезапущена знову. За замовчуванням тайм-аут складає 10 секунд.

Якщо ми маємо дуже складний важкий додаток (наприклад, Spree), 10 секунд недостатньо. Уявімо, що Spree вимагає 20 секунд для початкового запуску (йому потрібно час для ініціалізації кешу). Ми розгортаємо додаток і перезапускаємо Puma, Puma потребує більше 10 секунд на початковий запуск, і Watchdog скрипт бачить, що через 10 секунд Puma все ще не працює, вбиває Puma і намагається перезапустити її знову і знову в нескінченному циклі.

Рішення — збільшити параметр WatchdogSec. Проведіть кілька лабораторних експериментів і обчисліть оптимальний тайм-аут для вашого додатку.

Перекладено з: Puma doesn’t start it’s work after deploy on Rails 6/7 via Capistrano & Capistrano-Puma

Leave a Reply

Your email address will not be published. Required fields are marked *