отложенная работа и мониторинг

Кажется, не удается получить отложенную работу для запуска с monit. вот мой файл delayed_job.monitrc..

check process delayed_job with pidfile /var/www/app/shared/pids/delayed_job.pid
  start program = "cd /var/www/myapp/current && script/delayed_job start RAILS_ENV=production"
                as uid deploy and gid www-data
  stop program =  "cd /var/www/myapp/current && script/delayed_job stop RAILS_ENV=production"
           as uid deploy and gid www-data
  if mem usage > 20% for 5 cycles then alert
  if mem usage > 30% for 5 cycles then restart

Я также пытался выполнить прямую команду, и это даже не сработает без monit. Я должен находиться в текущем каталоге, чтобы скрипт/delayed_job начал функционировать, иначе он выдает ошибку, например...

/var/www/myapp/current/script/delayed_job start RAILS_ENV=production

/usr/local/lib/ruby/1.8/fileutils.rb:243:in `mkdir': Permission denied - log (Errno::EACCES)
    from /usr/local/lib/ruby/1.8/fileutils.rb:243:in `fu_mkdir'
    from /usr/local/lib/ruby/1.8/fileutils.rb:217:in `mkdir_p'
    from /usr/local/lib/ruby/1.8/fileutils.rb:215:in `reverse_each'
    from /usr/local/lib/ruby/1.8/fileutils.rb:215:in `mkdir_p'
    from /usr/local/lib/ruby/1.8/fileutils.rb:201:in `each'
    from /usr/local/lib/ruby/1.8/fileutils.rb:201:in `mkdir_p'
    from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/buffered_logger.rb:51:in `initialize'
    from /var/www/myapp/releases/20101001032406/config/initializers/dj.rb:4:in `new'
    from /var/www/myapp/releases/20101001032406/config/initializers/dj.rb:4
    from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:147:in `load_without_new_constant_marking'
    from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:147:in `load'
    from /usr/local/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/initializer.rb:622:in `load_application_initializers'
    from /usr/local/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/initializer.rb:621:in `each'
    from /usr/local/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/initializer.rb:621:in `load_application_initializers'
    from /usr/local/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/initializer.rb:176:in `process'
    from /usr/local/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/initializer.rb:113:in `send'
    from /usr/local/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/initializer.rb:113:in `run'
    from /var/www/myapp/current/config/environment.rb:10
    from /var/www/myapp/current/script/delayed_job:3:in `require'
    from /var/www/myapp/current/script/delayed_job:3

Состояние Monit просто говорит, что выполнение не удалось.


person badnaam    schedule 01.10.2010    source источник
comment
У вас есть журнал каталога в вашем Rails.root?   -  person shingara    schedule 01.10.2010
comment
Мне жаль, что я этого не понял. Журналы находятся в /var/www/myapp/shared/logs.   -  person badnaam    schedule 01.10.2010


Ответы (2)


Я предполагаю, что этот каталог журнала должен находиться в /var/www/myapp/current/, и DJ пытается выполнить mkdir перед записью в него. И, скорее всего, у пользователя «deploy» нет прав на запись в /var/www/myapp/current.

person Vijay Dev    schedule 01.10.2010
comment
Хм... нет, разверните собственный текущий каталог - person badnaam; 01.10.2010
comment
Я принял ответ, хотя это было не совсем так, это привело меня в правильном направлении. Благодарность - person badnaam; 03.10.2010
comment
@badnaam, что у тебя на самом деле? Вы можете поделиться, чтобы помочь подписчикам? - person Dennis C; 03.08.2012

Проблема заключалась в том, что у меня было следующее в инициализаторе DJ, чтобы DJ регистрировал обычные журналы рельсов (чего, кстати, не происходит). Это было решено, как только я прокомментировал это.

Delayed::Worker.logger = ActiveSupport::BufferedLogger.new("log/{Rails.env}_delayed_jobs.log##", Rails.logger.level)
Delayed::Worker.logger.auto_flushing = 1
person badnaam    schedule 01.10.2010