monit and rvm deployment
Integrating monit to monitor Ruby daemon script in an RVM context has always been a nightmare. I always have to spend hours trying to find the right magic command to start my script in the proper context, without any meaningful feedback from monit.
There is a few thing you have to know to ease that task.
Monit runs with a very basic environment defined
You will have a very short path and no $HOME for example.
The simplest thing to test your command is thus to test your start command with this basic environment. You can use the following:
sudo su
env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin /bin/sh
Use rvm-shell
rvm environment depends on Bash. If your source your rvm script as usual from sh it will fail.
The solution is to use rvm-shell command from your rvm environment.
Properly set your environment variable
Do not forget that in monit context there will be no RAILS_ENV and no HOME variable. Do not forget to set them if you need them.
Here is an example of a valid start command for monit:
/usr/local/bin/rvm-shell -c 'cd /home/myuser/myapp/current; RAILS_ENV=production bundle exec script/daemon_monitor start &'
Written by Mickaël Rémond
Related protips
2 Responses
Thanks for sharing this!
Thanks a Ton.