2011-06-09 88 views
2

我试图运行使用monit的delayed_job,但它无法作为rvm的路径(本地rvm安装每个用户)运行对命令不可用。我的应用程序是一个捆绑器的rails2应用程序。 Monit无法找到捆绑商。有没有人有任何建议,我怎么可以告诉关于监视的RVM路径?rvm monit delayed_job

我收到错误

[[email protected] current]$ monit start delayed_job -c config/delayed_job.monitrc 
'delayed_job' start: /usr/bin/env 
'delayed_job' failed to start 
no such file to load -- bundler 
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require' 
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' 
/home/rails/public_html/myapp/current/config/../config/preinitializer.rb:3 
/home/rails/public_html/myapp/current/config/boot.rb:28:in `load' 
/home/rails/public_html/myapp/current/config/boot.rb:28:in `preinitialize' 
/home/rails/public_html/myapp/current/config/boot.rb:10:in `boot!' 
/home/rails/public_html/myapp/current/config/boot.rb:123 
/home/rails/public_html/myapp/current/config/environment.rb:12:in `require' 
/home/rails/public_html/myapp/current/config/environment.rb:12 
/home/rails/public_html/myapp/current/script/delayed_job:3:in `require' 
/home/rails/public_html/myapp/current/script/delayed_job:3 

我的config/delayed_job.monitrc

set daemon 120 

check process delayed_job with pidfile /home/rails/public_html/myapp/shared/pids/delayed_job.pid 
    start program = "/usr/bin/env RAILS_ENV=staging /home/rails/public_html/myapp/current/script/delayed_job start" 
    stop program = "/usr/bin/env RAILS_ENV=staging /home/rails/public_html/myapp/current/script/delayed_job stop" 

和脚本/ delayed_job的可执行

#!/usr/bin/env ruby 

require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment')) 
require 'delayed/command' 
Delayed::Command.new(ARGV).daemonize 

回答

3

如果你已经工作正常的monit与其他服务,只需要为rvm环境添加delayed_job守护进程即可尝试使用此conf文件E(我的作品)

/etc/monit/conf.d/delayed_job.conf(我有Ubuntu的服务器)

check process delayed_job with pidfile /{project_folder}/tmp/pids/delayed_job.pid 
start program = "RAILS_ENV=production rvm -S /{project_folder}/script/delayed_job start" 
stop program = "RAILS_ENV=production rvm -S /{project_folder}/script/delayed_job stop" 

这里rvm -S命令让当前RVM下运行脚本红宝石环境

你可以尝试与启动守护

$ RAILS_ENV=production rvm -S /{project_folder}/script/delayed_job start 

的命令,并且守护进程会开始比你有delayed_job.conf文件

很好的机会,不要忘记检查,如果PID文件已在tmp/pids/文件夹中创建过

(与最后一个字改为“状态”检查)
9

'rvm -S'不适合我。

关于http://matthew.mceachen.us/blog/howto-make-system-wide-rvm-installations-work-with-cron-monit-delayed_job-and-passenger-1021.html的说明做了。

check process delayed_job.0 
    with pidfile /u/apps/adgrok/shared/pids/delayed_job.0.pid 
    start program = "/usr/local/bin/rvm-shell -c 'RAILS_ENV=production /u/apps/adgrok/current/script/delayed_job start -i 0'" as uid deploy and gid deploy 
    stop program = "/usr/local/bin/rvm-shell -c 'RAILS_ENV=production /u/apps/adgrok/current/script/delayed_job stop -i 0'" as uid deploy and gid deploy 
    if 2 restarts within 15 cycles then timeout 

还有一个值得注意的参考讨论线程与RVM约的monit作者:http://groups.google.com/group/rubyversionmanager/browse_thread/thread/d1a6c1f6396a8bf6/51afece4c8943912?#51afece4c8943912

+0

这对我的作品!现在尝试了几个小时的许多不同的解决方案。 – Frexuz 2012-01-14 21:33:55