在尝试了几个小时(并且还尝试了上帝和Bluepill)后,我决定在这里提出我的问题,因为我完全无法解决这个问题.
我有一个Rails应用程序.我想使用Thin作为我的应用服务器.我想使用Monit来监控我的Thin实例.我使用RVM来管理我的Ruby版本作为我的本地用户.
我有以下monit文件设置,可以满足我想做的事情,但不会:
check process thin-81 with pidfile /Users/Michael/Desktop/myapp/tmp/pids/thin.81.pid start program = "/Users/Michael/.rvm/gems/ruby-1.9.2-p180/bin/thin start -c /Users/Michael/Desktop/myapp -e production -p 81 -d -P tmp/pids/thin.81.pid" stop program = "/Users/Michael/.rvm/gems/ruby-1.9.2-p180/bin/thin stop -c /Users/Michael/Desktop/myapp -P tmp/pids/thin.81.pid" if totalmem is greater than 150.0 MB for 2 cycles then restart
如果我只是将启动程序复制/粘贴到命令行(Monit之外),它就可以工作.停止程序以后停止Thin实例也是如此.然而,通过Monit运行它似乎不起作用.
在-v详细模式下运行它会产生以下结果:
monit: pidfile '/Users/Michael/Desktop/myapp/tmp/pids/thin.81.pid' does not exist
这让我相信Thin永远不会初始化. Monit是以root身份运行吗?因为如果它确实那么它显然不会安装正确的gems,因为我使用RVM而不是“系统”Ruby.我目前在OSX上(但最终将部署到Linux) – 有谁知道这可能是什么原因?如果Monit是通过root运行的,我怎么能让它使用RVM呢?或者我可以告诉Monit执行启动/停止程序迈克尔:工作人员(我认为它将在OSX上?)
任何帮助深表感谢!
解决方法
monit清除环境,也不为命令运行shell(更不用说交互式命令)了.我发现我必须做以下事情:
/usr/bin/bash -c 'export rvm_path=/home/foo/.rvm; . $rvm_path/scripts/rvm; cd my_ruby_app_path; $rvm_path/bin/rvm rvmrc load; ./my_ruby_app'
作为monit start命令.