2016-12-08 9 views
1

Rails Rufus scheduler выполняет некоторые файловые операции. При запуске сервера, то Руфус хрон вызывается, но планировщик останавливается, когда он сталкивается с файловых операцийПланировщик Rufus останавливается на файловых операциях в пассажире Nginx

Мой планировщик выглядит, как показано ниже

deployed_test_scheduler = Rufus::Scheduler.new deployed_test_scheduler.cron("56 20 * * *") do OutputsController.deploy_tests puts "Got Deployed Tests" end

и фрагмент кода методов deploy_tests выглядит, как показано ниже

.... 
Rails.logger.info "response0"  
target = open(filepath, 'w') 
Rails.logger.info "response1" 
target.write(response) 
Rails.logger.info "response2" 
target.close 
Rails.logger.info "response3" 
.... 

и production.log выглядит, как показано ниже

..... I, [2016-12-08T05:03:57.193906 #27950] INFO -- : response0 .....

никаких других журналов печатаются ожидает «response0», но отлично работает на WEBrick

Что вызывает Nginx пассажир, чтобы остановить дальнейшую обработку, когда он встречает операцию File

P.S. рельсы версии - 4.1.6 рубиновая версия - 2.2.0 версия для пассажира - 5.0.30 версия для nginx - 1.10.1

+0

Wrap код в блоке BEGIN/спасательных и регистрируется ошибка, если таковые имеются. – jmettraux

+0

Один вопрос: разрешен ли ваш http://stackoverflow.com/questions/41027855/passenger-behind-nginx-not-preserving-rufus-scheduler-thread? Кажется, это так, потому что пассажир не убивает руфус-планировщика. – jmettraux

+0

И если вы подразумеваете, что это ошибка rufus-scheduler, лучше указать, какую версию вы используете. – jmettraux

ответ

1

Похоже, что ваш код сталкивается с проблемой и вызывает ошибку. Заверни это.

Try с:

begin 
    Rails.logger.info "filepath is #{filepath}" 
    Rails.logger.info "filepath exists? #{File.exist?(filepath)}" 
    target = open(filepath, 'w') 
    Rails.logger.info "response1" 
    target.write(response) 
    Rails.logger.info "response2" 
    target.close 
    Rails.logger.info "response3" 
rescue => err 
    Rails.logger.error "something went wrong: " + err.inspect 
    err.backtrace.each_with_index { |l, i| Rails.logger.error("#{i}: #{l}") } 
end 

Он должен сказать вам, что Filepath вы ориентируетесь, если он существует, и какая ошибка возникает, если таковые имеются.

Добавление:

Если вам нужен обработчик ошибок для всего экземпляра Руфус-планировщика, вы можете изменить его on_error обработчик.

В вашем случае это может выглядеть

# ... 

deployed_test_scheduler = Rufus::Scheduler.new 

def deployed_test_scheduler.on_error(job, error) 

    Rails.logger.error(
    "err#{error.object_id} rufus-scheduler intercepted #{error.inspect}" + 
    " in job #{job.inspect}") 
    error.backtrace.each_with_index do |line, i| 
    Rails.logger.error(
     "err#{error.object_id} #{i}: #{line}") 
    end 
end 

# ... 

См https://github.com/jmettraux/rufus-scheduler#rufusscheduleron_errorjob-error