Как мягко перезапустить приложение ruby? - PullRequest
2 голосов
/ 22 ноября 2011

У меня есть простое приложение ruby ​​ (это не веб-приложение, поэтому не используется уже существующая платформа, такая как rails, sinatra ...) для непрерывной обработки данных.

Я планирую развернуть его с помощью Capistrano и просто запустить его командой ruby ​​. Проблема в том, что я получаю данные партиями, и их обработка может занять несколько минут.

При развертывании новой версии я хотел бы ввести программный перезапуск , означающий, что приложение будет сначала уведомлять о новом развертывании: чтобы оно могло завершить пакет, а затем сказать: готов к обновлению »(сценарий развертывания будет ожидать этого сообщения).

Есть ли для этого Драгоценный камень? Может быть, Capistrano включает эту опцию?

1 Ответ

2 голосов
/ 22 ноября 2011

Разрешить приложению перехватывать сигналы POSIX.Взгляните на Класс сигналов .

. Если вы отправите kill <signal type> процессу, будут вызваны любые обработчики сигналов, независимо от того, что процесс в данный момент делает.Например, вы можете установить какой-либо флаг, который проверяется в разумной точке вашей логики (например, в конце цикла выполнения), завершая процесс, если этот флаг установлен.Есть много сигналов , на которые вы можете ответить, но SIGHUP или один из SIGUSR сигналов, вероятно, имеют смысл для того, что вы делаете ... вы можете реагировать на любой сигнал, который вам нравится, любым способомВы хотите, но имеет смысл разрешить поведение по умолчанию для большинства обычно обрабатываемых (например, SIGTERM и SIGKILL).Для действительно сложных вещей вы можете принять закодированную серию сигналов для запуска определенных событий.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...