Rails的关闭钩子

问题描述 投票:10回答:2

我希望在Rails关闭时运行一些清理代码 - 这可能吗?我的情况是我在后台有一些线程(我正在使用jruby并调用java),这些线程一直存在于进程的生命中,我需要让他们知道关闭自己

谢谢!

ruby-on-rails jruby
2个回答
17
投票

可能应该只使用Ruby退出处理程序,这是一个内核方法:

$ irb
>> at_exit do
?>   puts 'bye...'
>> end
=> #<Proc:0xb79a87e4@(irb):1>
>> exit
bye...
$ 

0
投票

在Rails应用程序的上下文中,放置这样一个文件的最佳位置是config/initializers。在我的应用程序中,每当开发或测试环境关闭时,我都需要刷新Redis / Sidekiq队列。这非常有效。

config/initializers/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?
© www.soinside.com 2019 - 2024. All rights reserved.