Планировщик Rufus останавливает операции с файлами в Nginx пассажире

Планировщик Rails Rufus выполняет некоторые файловые операции. Когда я запускаю сервер, вызывается rufus cron, но планировщик останавливается, как только он сталкивается с файловыми операциями.

Мой планировщик выглядит следующим образом

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 прекращать дальнейшую обработку, когда он сталкивается с файловыми операциями

p.s. версия rails - 4.1.6 версия ruby ​​- пассажирская версия 2.2.0 - версия 5.0.30 nginx - 1.10.1


person saranya elumalai    schedule 08.12.2016    source источник
comment
Оберните свой код в блок begin/rescue и запишите ошибку, если таковая имеется.   -  person jmettraux    schedule 08.12.2016
comment
Один вопрос: ваш stackoverflow.com/questions/41027855/ решено? Похоже на то, что rufus-scheduler не убит Пассажиром.   -  person jmettraux    schedule 08.12.2016
comment
И если вы подразумеваете, что это ошибка rufus-scheduler, вам лучше указать, какую его версию вы используете.   -  person jmettraux    schedule 08.12.2016
comment
относительно stackoverflow.com /questions/41027855/ Пассажир не обслуживает приложение без запроса пользовательского интерфейса. Как только клиент запускает пользовательский интерфейс, пассажир запускает новый процесс и сохраняет его активным благодаря свойству min.instances. Это гарантирует запуск планировщика rufus.   -  person saranya elumalai    schedule 08.12.2016


Ответы (1)


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

Попробуйте с:

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

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

Дополнение:

Если вам нужен обработчик ошибок для всего экземпляра rufus-scheduler, вы можете переопределить его обработчик 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

person jmettraux    schedule 08.12.2016