2

monit を使用してdelayed_job を実行しようとしていますが、rvm のパス (ユーザーごとのローカル rvm インストール) をコマンドで使用できないため、実行できません。私のアプリケーションは、バンドラーを備えた rails2 アプリです。Monit はバンドラーを見つけることができません。監視する rvm パスについてどのように伝えることができるかについて、誰か提案はありますか?

エラーが発生しています

[rails@x-rws1 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"

および script/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
4

2 に答える 2

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

monitに関する RVM の作成者とのディスカッション スレッドへの注目すべき参照もあります。

于 2011-12-13T01:05:04.650 に答える
3

すでに他のサービスで適切に動作している monit があり、rvm 環境用のdelayed_job デーモンを追加する必要がある場合は、この conf ファイルを使用してみてください (私にとってはうまくいきます)。

/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 ruby​​ 環境でスクリプトを実行させるコマンド

でデーモンを起動しようとすることができます

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

コマンドとデーモンが起動する場合(最後の単語を「ステータス」に変更して確認してください)、delayed_job.confファイルで十分な可能性があります

tmp/pids/また、pidファイルがフォルダーにも作成されたかどうかを確認することを忘れないでください

于 2011-07-28T20:56:57.827 に答える