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
Đầ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