2010-07-22 30 views
0

我有一个缓存和数据库的数据存储,很简单。诡异的部分是我想要一种方法来控制数据存储是否以实时方式访问数据库。也就是说,当进程运行时,我希望能够切换,如果它连接到数据库或不。如何获取数据到正在运行的ruby进程?

我看着env变量,但它似乎并不像那些在进程运行时得到更新。有没有一种简单的方法可以让命令行进入正在运行的进程,或者我只需要依赖ops在发生灾难时能够丢弃db监听器?

请注意,这一切都是在香草红宝石 - 红宝石轨道上完成。

谢谢! -Jess

回答

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! 
+0

谢谢。这就是我们最终做的。我只是有一些虚幻的希望,但这真的不坏。 – Jess 2010-07-26 19:59:54

0

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

+0

是的,我可以这么做 - 设置一个命令行脚本,将消息传递给ruby进程。这是一个很好的观点。我希望有一个更简单的解决方案,但是,无论如何,当然,所有的东西都是这样。虽然有点实施皮塔。 – Jess 2010-07-22 21:46:21

相关问题