Я натолкнулся на две причины задержки delayed_job в молчании.Первый - это фактические ошибки, когда люди использовали libxml в разветвленных процессах (это появилось в списке рассылки некоторое время назад).
Второй - это проблема, связанная с версией демонов версии 1.1.0, для которой используется delayed_jobу него есть проблема (https://github.com/collectiveidea/delayed_job/issues#issue/81),, это можно легко обойти, используя 1.0.10, что и есть в моем собственном Gemfile.
Ведение журнала
Идет вход в систему delayed_jobпоэтому, если работник умирает без вывода сообщения об ошибке, это обычно происходит из-за того, что он не выдает исключение (например, Segfault) или что-то внешнее убивает процесс.экземпляры заданий, и до сих пор это очень успешно обеспечивало выполнение заданий. Шаги по запуску bluepill для приложения довольно просты
Добавьте гем bluepill в свой Gemfile:
# Monitoring
gem 'i18n' # Not sure why but it complained I didn't have it
gem 'bluepill'
Я создал файл конфигурации bluepill:
app_home = "/home/mi/production"
workers = 5
Bluepill.application("mi_delayed_job", :log_file => "#{app_home}/shared/log/bluepill.log") do |app|
(0...workers).each do |i|
app.process("delayed_job.#{i}") do |process|
process.working_dir = "#{app_home}/current"
process.start_grace_time = 10.seconds
process.stop_grace_time = 10.seconds
process.restart_grace_time = 10.seconds
process.start_command = "cd #{app_home}/current && RAILS_ENV=production ruby script/delayed_job start -i #{i}"
process.stop_command = "cd #{app_home}/current && RAILS_ENV=production ruby script/delayed_job stop -i #{i}"
process.pid_file = "#{app_home}/shared/pids/delayed_job.#{i}.pid"
process.uid = "mi"
process.gid = "mi"
end
end
end
Затем в моем файле развертывания capistrano я только что добавил:
# Bluepill related tasks
after "deploy:update", "bluepill:quit", "bluepill:start"
namespace :bluepill do
desc "Stop processes that bluepill is monitoring and quit bluepill"
task :quit, :roles => [:app] do
run "cd #{current_path} && bundle exec bluepill --no-privileged stop"
run "cd #{current_path} && bundle exec bluepill --no-privileged quit"
end
desc "Load bluepill configuration and start it"
task :start, :roles => [:app] do
run "cd #{current_path} && bundle exec bluepill --no-privileged load /home/mi/production/current/config/delayed_job.bluepill"
end
desc "Prints bluepills monitored processes statuses"
task :status, :roles => [:app] do
run "cd #{current_path} && bundle exec bluepill --no-privileged status"
end
end
Надеюсь, это немного поможет.