текст перекладу
Може статися, що після успішного розгортання Puma не працює. Якщо ми подивимось у puma.error.log, ми не побачимо ніяких помилок. Але вивчаючи puma.access.log, ми можемо побачити, що веб-сервер постійно аварійно вимикається і намагається перезапуститись знову і знову в нескінченному циклі.
Це наш випадок. І причина може бути дуже неочевидною. Давайте розберемось, як працює гем capistrano-puma.
- Уявімо, що у нас є test_app для RoR 6/7
- Уявімо, що ми використовуємо гем capistrano-puma 6+
- Не має значення, чи слухаємо ми 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
- testapppumaproduction.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