Last active
July 18, 2022 17:37
-
-
Save runlevel5/5844933 to your computer and use it in GitHub Desktop.
pumactl is very broken, @nemshilov and @joneslee85 wrote this bash script replacement and it works so reliably on production server. So here it is, share with the world!
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# Simple move this file into your Rails `script` folder. Also make sure you `chmod +x puma.sh`. | |
# Please modify the CONSTANT variables to fit your configurations. | |
# The script will start with config set by $PUMA_CONFIG_FILE by default | |
PUMA_CONFIG_FILE=config/puma.rb | |
PUMA_PID_FILE=tmp/pids/puma.pid | |
PUMA_SOCKET=tmp/sockets/puma.sock | |
# check if puma process is running | |
puma_is_running() { | |
if [ -S $PUMA_SOCKET ] ; then | |
if [ -e $PUMA_PID_FILE ] ; then | |
if cat $PUMA_PID_FILE | xargs pgrep -P > /dev/null ; then | |
return 0 | |
else | |
echo "No puma process found" | |
fi | |
else | |
echo "No puma pid file found" | |
fi | |
else | |
echo "No puma socket found" | |
fi | |
return 1 | |
} | |
case "$1" in | |
start) | |
echo "Starting puma..." | |
rm -f $PUMA_SOCKET | |
if [ -e $PUMA_CONFIG_FILE ] ; then | |
bundle exec puma --config $PUMA_CONFIG_FILE | |
else | |
bundle exec puma --daemon --bind unix://$PUMA_SOCKET --pidfile $PUMA_PID_FILE | |
fi | |
echo "done" | |
;; | |
stop) | |
echo "Stopping puma..." | |
kill -s SIGTERM `cat $PUMA_PID_FILE` | |
rm -f $PUMA_PID_FILE | |
rm -f $PUMA_SOCKET | |
echo "done" | |
;; | |
restart) | |
if puma_is_running ; then | |
echo "Hot-restarting puma..." | |
kill -s SIGUSR2 `cat $PUMA_PID_FILE` | |
echo "Doublechecking the process restart..." | |
sleep 5 | |
if puma_is_running ; then | |
echo "done" | |
exit 0 | |
else | |
echo "Puma restart failed :/" | |
fi | |
fi | |
echo "Trying cold reboot" | |
script/puma.sh start | |
;; | |
*) | |
echo "Usage: script/puma.sh {start|stop|restart}" >&2 | |
;; | |
esac |
thanks ❤️
I wasn't having any luck with the pid check at https://gist.github.com/joneslee85/5844933#file-puma-sh-L16. I ended up having to change this to:
if ps -p `cat $PUMA_PID_FILE` > /dev/null; then
Fork of a fork - https://gist.github.com/ktaragorn/462ee4afcb386a2d85c5. This takes @ihinojal 's fork, modifies it to allow for a tcp:// bind address, and also incorporate @spacechurro 's fix for the PID check
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
pumactl is still broken