Как получить данные для запущенного процесса ruby? - PullRequest
0 голосов
/ 23 июля 2010

У меня есть хранилище данных с кешем и дб, просто. Хитрость в том, что мне нужен способ контролировать, попадает ли хранилище данных в базу данных в режиме реального времени. То есть во время работы процесса я хочу иметь возможность переключаться, если он подключен к БД или нет.

Я изучил переменные env, но не похоже, что они обновляются по мере выполнения процесса. Есть ли простой способ получить немного информации из командной строки в работающий процесс, или мне просто нужно полагаться на то, что ops сможет отбросить слушателей db в случае аварии?

Обратите внимание, что все это делается в ванильном рубине, а не в рельсах.

Спасибо! -Jess

Ответы [ 3 ]

0 голосов
/ 23 июля 2010

Я думаю, вы можете использовать именованные каналы для простого общения:

#pipes.rb:
f = File.open 'mypipe', 'r+'
loop do
  begin
    s = f.read_nonblock 1
  rescue Exception
  end
  case s
  when '0'
    puts 'Turn off DB access!'
  when '1'
    puts 'Turn on DB access!'
  end
  sleep 1
end

И вы можете контролировать свой доступ к БД извне, записав в именованный канал:

jablan-mbp:dev $ echo 101 > mypipe 

Что приводит к:

jablan-mbp:dev $ ruby pipes.rb 
Turn on DB access!
Turn off DB access!
Turn on DB access!
0 голосов
/ 23 июля 2010

Предполагая, * NIX, вы рассматривали сигналы? (kill -HUP pid) - http://ruby -doc.org / core / classes / Signal.html

0 голосов
/ 23 июля 2010

Возможно, стоит рассмотреть стратегию с общей памятью. Предполагая, что вы работаете в системе POSIX, проверьте mmap для файлов с отображенной памятью и SysVIPC для очередей сообщений, семафоров и разделяемой памяти.

...