gpt4 book ai didi

ruby - 如何软重启 ruby​​ 应用程序?

转载 作者:太空宇宙 更新时间:2023-11-03 16:08:48 24 4
gpt4 key购买 nike

我有一个普通 ruby​​ 应用程序(它不是 Web 应用程序,所以不使用像 rails、sinatra 等现有平台...)连续处理数据。

我计划使用 Capistrano 部署它,并使用 ruby 命令启动它。问题是我批量获取数据,处理它们可能需要几分钟。

当我部署一个新版本时,我想引入一个软重启,这意味着应用程序将首先收到有关新部署的通知:这样它就可以完成批处理,然后说“我我已准备好更新”(部署脚本将等待该消息)。

有什么 Gem 吗?也许 Capistrano 包含该选项?

最佳答案

允许应用程序捕获 POSIX 信号。看看 Signal class

如果您向进程发送 kill <signal type>,则将调用任何信号处理程序,而不管进程当前正在做什么。例如,您可以设置某种标志,在您的逻辑中的某个敏感点(例如,在运行循环结束时)检查该标志,如果设置了该标志,则终止该过程。您可以响应 many signals,但 SIGHUPSIGUSR 信号之一可能对您正在做的事情有意义......您可以以任何您喜欢的方式响应您喜欢的任何信号,但允许默认值是有意义的大多数典型处理的行为(如 SIGTERMSIGKILL )。对于非常复杂的东西,您实际上也可以接受一系列编码信号来触发特定事件。

Signal.trap("HUP") do
puts "Huh?"
end

loop do
puts "Looping..."
sleep 2
end

输出

[chris@chipbook:~%] ruby sig_demo.rb 
Looping...
Looping...
Looping...
Looping...
Looping...
Huh?
Looping...
Looping...
Looping...
Huh?
Looping...
Looping...
Looping...

因为我在另一个终端窗口中完成了:

[chris@chipbook:/usr/local%] ps aux | grep ruby
chris 69487 0.0 0.0 2425480 188 s005 R+ 11:26pm 0:00.00 grep ruby
chris 69462 0.0 0.1 2440224 4060 s004 S+ 11:26pm 0:00.03 ruby sig_demo.rb
[chris@chipbook:/usr/local%] kill -HUP 69462
[chris@chipbook:/usr/local%] kill -HUP 69462

关于ruby - 如何软重启 ruby​​ 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8225757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com