ruby – OSX / Linux上的Monit RVM Thin

在尝试了几个小时(并且还尝试了上帝和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命令.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...