Blog #20

Upgrade Puma 5

DATPMT Mar 25 2024 Tag icon
#Capistrano
#Puma

# Reason

 

Một bức ảnh gây ra nhiều đau đớn cho những ai dùng Puma 4. Đơn giản hơn, Puma 4 thỉnh thoảng à không phải là rất hay không thể tự chạy puma:restart với Capistrano

Và có rất nhiều cách work around mà các bạn có thể tìm thấy trên Stack Overflow. Nhưng… nó cũng chỉ là work around. Tốn thêm thời gian restart và maintain.

Vì vậy hôm nay mình sẽ hướng dẫn mọi người upgrade lên Puma 5 để thoát khỏi nỗi khổ như mình đã gánh chịu nhiều năm qua.

Cảm ơn tác giả comment này đã cho mình động lực upgrage Puma 5  

# Getting started

Đầu tiên là update Gemfile

gem 'puma', '~> 5.6.8'

Chạy bundle:

$ bundle install

Update Capfile

install_plugin Capistrano::Puma::Systemd # Thêm dòng này
# install_plugin Capistrano::Puma::Daemon # Xoá dòng này

Nhớ xoá mấy cái work around mà lúc trước xài (nếu có :D)

Rồi tới đây push commit lên được rồi. Nhớ là push commit thôi nha :). Push lên tạo PR rồi để đó đọc tiếp nè.

Tiếp theo setting trên server như sau:

Grand permission cho deploy user:

$ sudo cat /etc/sudoers

Tiếp theo sửa deploy user như sau:

deploy  ALL=(ALL:ALL) ALL # deploy là user name

cd đến app_path rồi gõ lệnh:

$ cap production puma:systemd:config

Để làm gì ư? Để nó show list puma command line và cái này mới quan trọng nè. Nó tự tạo puma_appname_production.service

Bây giờ update file đó lại như sau:

Đầu tiên mở file đó ra:

$ sudo nano /etc/systemd/system/puma_appname_production.service

Update User (Cái này cực kì quan trọng nha nếu không có cái này thì nó sẽ lỗi và loop, mình đã tốn rất nhiều thời gian để phát hiện ra nguyên nhân)

User=deploy # deploy là tên user ubuntu mà các bạn dùng để deploy

Sau khi lưu lại thì các bạn phải chạy lệnh này để nó lưu lại setting:

$ sudo systemctl daemon-reload

Ok giờ các bạn có thể merge PR lúc nãy mới tạo và deploy thử nha. Good luck :D

À nhớ kill puma.sock cũ sau khi deploy thành công nha:

$ ps aux | grep puma