(Старый вопрос, но мне не нравятся вопросы без ответа; -)
Удобный способ сделать это - установить "финализаторы", аналогичные "инициализаторам" rails.Затем вы можете запускать потоки в инициализаторах и закрывать их в финализаторах.
- Создайте каталог " config / finalizers " рядом с каталогом " config / initializers ".
- поместите этот код в инициализатор:
(мы используем ruby "на выходе", ср. Отключаемая ловушка для Rails )
at_exit do
finalizer_files = File.join(::Rails.root.to_s, "config/finalizers/*.rb")
Dir.glob(finalizer_files).sort.each do |finalizer_file|
require finalizer_file
end
end
3.Затем мы можем использовать что-то подобное в «финализаторе»: (здесь мы пытаемся остановить «работников», предположительно запущенных в инициализаторах)
if Settings.web_app.engine.workers_count != 0 && Settings.web_app.engine.auto_manage_workers then
puts ' * Automatic shutdown of workers'
...
end