如何将数据导入正在运行的ruby进程?

时间:2010-07-22 21:28:51

标签: ruby communication environment

我有一个带缓存和数据库的数据存储区,简单。棘手的部分是我想要一种方法来控制数据存储是否以实时方式命中数据库。也就是说,当进程正在运行时,我希望能够切换它是否连接到数据库。

我查看了env变量,但看起来并不像进程运行时那样更新。有没有一种简单的方法可以从命令行进入正在运行的进程,或者我只需要依赖ops能够在发生灾难时丢弃数据库侦听器吗?

请注意,这一切都是在香草红宝石中完成的 - 而不是铁轨上的红宝石。

谢谢! -Jess

3 个答案:

答案 0 :(得分:0)

共享内存策略可能值得考虑。假设您正在POSIX系统上运行,请查看mmap以获取内存映射文件,并SysVIPC查看消息队列,信号量和共享内存。

答案 1 :(得分:0)

我认为您可以使用命名管道进行简单的沟通:

#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!

答案 2 :(得分:0)

假设* NIX,您是否考虑过信号? (kill -HUP pid) - http://ruby-doc.org/core/classes/Signal.html