Отключающий крюк для Rails - PullRequest
       7

Отключающий крюк для Rails

10 голосов
/ 23 октября 2009

Я бы хотел, чтобы какой-нибудь код очистки запускался при завершении работы Rails - это возможно? Моя ситуация в том, что у меня есть несколько потоков в фоновом режиме (я использую jruby и звоню в java), которые живут для жизни процесса, и мне нужно, чтобы они знали, чтобы закрыть себя

Спасибо!

Ответы [ 2 ]

17 голосов
/ 23 октября 2009

Вероятно, следует использовать обработчик выхода Ruby, который является методом ядра:

$ irb
>> at_exit do
?>   puts 'bye...'
>> end
=> #<Proc:0xb79a87e4@(irb):1>
>> exit
bye...
$ 
0 голосов
/ 14 марта 2019

В контексте приложения 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?
...