Keep your crashing Rails app always running.
Posted: October 6th, 2010 | Author: admin | Filed under: Uncategorized |I realize that this title seems to discredit my programming abilities. However, sometimes you have an issue that is not easily explained and takes several outages to determine the root cause of. This was happening to a low traffic site of mine. Because it was not getting tons of traffic, the site would some times be down for days before we knew about it. To help with this problem, I put this simple script in my Rails root directory:
#!/bin/sh
if [ `ps aux | grep ruby | grep -v grep | wc -l` -eq 0 ]; then
cd ~/rails_apps/oliver
echo "`date` : app is down, starting it up" >> log/rails_persist.log
rm log/*.pid
/usr/bin/ruby /usr/bin/mongrel_rails start -p 12002 -d -e production -P log/mongrel.pid
fi
Save this as a file called rails_persist.sh in your root Rails app directory. The conditional checks to see if there is any Ruby process running on the server. If you have multiple Rails apps on your system, you may want to add another | grep to this conditional.
Note that this command to start Ruby was taken directly from the method that I found cPanel was using. You can change out this last line with whatever works for you. Every time the app is down when this script is running, it starts it back up and logs the time in the file log/rails_persist.log.
Finally the last part is to add the following to your crontab:
* * * * * sh /home/my_name/rails_apps/oliver/rails_persist.sh
This will tell the cron service to run the script every minute. If you are using cPanel, you can add this in the cPanel console under Advanced > Cron Jobs.
Leave a Reply