ruby - OSX/Linux 上的 Monit + RVM + Thin

标签 ruby rvm thin monit

在尝试了几个小时(也尝试了 God 和 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

如果我只是将 start program 复制/粘贴到命令行(在 Monit 之外),它就可以工作。 stop program 之后停止 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 以 Michael:staff 的身份执行启动/停止程序(我假设它会在 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 启动命令。

关于ruby - OSX/Linux 上的 Monit + RVM + Thin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5863815/

相关文章:

ruby - 按数字正则表达式希腊字符

ruby - rvm:找不到命令(Fedora 12)

ruby - 当我运行 "gem list"时, bundler (默认 : 1. 16.2)是什么意思?什么是(默认)部分?

Ruby:以困难的方式扩展缩短网址

ruby - 如何使用 Ruby 打印 HTML 表格?

ruby - 精简读取已配置的用户环境

ruby - 如何从 Thin 中收到的 HTTP POST 请求中获取内容?

ruby-on-rails - 如何在 Rails 3 项目中包含 SSL 证书

ruby - Ansicon 不适用于 Windows 8

ruby-on-rails - 试图添加 .rvmrc 以忽略,它不起作用