Работать с граблями - PullRequest
4 голосов
/ 15 июля 2009

Я использую delayed_job для запуска заданий, при этом новые задания добавляются cronjob каждую минуту.

В настоящее время у меня возникла проблема, из-за которой случайные задания rake jobs: work, запущенные в данный момент вручную с помощью nohup rake jobs: work &.

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

Есть ли какая-то магия bash / Ruby, чтобы это произошло, или мне суждено запустить службу мониторинга на моем сервере с некоторыми ужасными взломами, чтобы разрешить непривилегированной учетной записи, которую сайт развертывает, перезапустить ее?

Ответы [ 4 ]

0 голосов
/ 11 марта 2013

избавьтесь от отложенной работы и используйте всякий раз, когда или resque

0 голосов
/ 12 августа 2009

Для меня самоцвет демонов был ненадежным с delayed_job. Это может быть плохо написанный сценарий (он использовался на delayed_job github page ), а не ошибка демонов, я не совсем уверен. Но по какой-либо причине он будет непостоянно перезагружаться при развертывании.

Я где-то читал, что это произошло потому, что он не ждал фактического завершения процесса, поэтому файлы pid перезаписывались или что-то в этом роде. Но я не удосужился заняться расследованиями. Я переключился на гем демона-порождения, используя эти инструкции , и теперь он кажется намного более надежным.

0 голосов
/ 23 августа 2011

Я реализовал небольшую задачу с граблями, которая снова и снова запускает задачу:

desc "Start a delayed_job worker in a endless loop to prevent exits."
task :jobs => :environment do
  while true
    begin
      Delayed::Worker.new(:min_priority => ENV['MIN_PRIORITY'], 
                          :max_priority => ENV['MAX_PRIORITY'], 
                          :quiet => false).start
    rescue Exception => e
      puts "Exception occured (#{e})"
    end
    puts "Task jobs:work exited, clearing queue and restarting"
    sleep 1
    Delayed::Job.delete_all
  end
end

Видимо, это не сработало. Итак, я закончил с этим простым решением:

for (( ;; )); do rake jobs:work --trace; done
0 голосов
/ 15 июля 2009

Документы delayed_job предполагают, что вы используете службу мониторинга для управления работой (ями) граблей. Я использую рунит - хорошо работает.

(Вы можете установить его в режиме, в котором он не заменяет init.)

Добавлено:

Re: перезапустить Capistrano: да, runit позволяет это. Просто сделайте

sudo sv kill delayed_job

в вашем рецепте Capistrano, чтобы убить работника delayed_job. После этого Runit перезапустит его, используя только что развернутую базу кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...