Отключающий крюк для рельсов
-
05-07-2019 - |
Вопрос
Я бы хотел, чтобы какой-нибудь код очистки запускался при завершении работы Rails - возможно ли это?Моя ситуация такова, что у меня есть несколько потоков в фоновом режиме (я использую jruby и вызываю java), которые работают в течение всего процесса, и мне нужно сообщить им, чтобы они закрылись
Спасибо!
Решение
Вероятно, следует просто использовать обработчик выхода Ruby, который является методом ядра:
$ irb
>> at_exit do
?> puts 'bye...'
>> end
=> #<Proc:0xb79a87e4@(irb):1>
>> exit
bye...
$
Другие советы
В контексте приложения Rails лучшее место для размещения такого файла находится в config/initializers
.В моем приложении мне нужно было очищать очередь Redis / Sidekiq всякий раз, когда среды разработки или тестирования завершали работу.Это работает идеально.
конфигурация/инициализаторы/at_exit.rb
at_exit do
begin
puts 'Flushing Redis...'
Redis.new.flushall
rescue => e
puts "There was an #{e.to_s} while flushing redis..."
ensure
puts 'Done Flushing Redis!'
end
end unless Rails.env.production?
Не связан с StackOverflow