两个不同的.rb文件可以访问同一个变量吗?

时间:2012-05-23 23:03:29

标签: ruby

我在同一台计算机(Win XP)上运行了脚本web.rb(sinatra)和rufus.rb(使用rufus gem的cron)。两者都使用functions.rb,其中我有所有的功能。我有一个数组变量$ webserver_status,其中存储了Web服务器执行/正在执行的命令的历史记录。 Web服务器运行一些dos命令和php脚本,我想确保一次只运行一个,并且还向用户提供一些概述。

我曾经通过http运行cron jobs(rufus.rb),所以实际上我从浏览器访问Web服务器。因此状态变量已正确更新。现在我开始从functions.rb调用相同的代码,因此变量不再显示正确的服务器状态。

cron有没有办法直接访问$ webserver_status变量?

或者我必须通过http更新变量?或者磁盘上的某种状态文件?

  • ruby​​ 1.8.7(2010-08-16 patchlevel 302)[i386-mingw32]
  • Web服务器始终运行
  • 我有cron代码的生产和测试版本

2 个答案:

答案 0 :(得分:2)

查看我提出的建议in this answer。除非我在你的场景中遗漏了什么,否则这个问题基本上是一样的。根据您的需要,有许多可能的解决方案。

修改

根据您的评论,我猜测您希望跨两个ruby进程共享内存或以其他方式在进程之间进行通信。阅读IPC in ruby,了解如何使UNIX套接字满足您的需求。

谈论在两个进程中访问的同一个变量真的没有意义 - 你必须经过某种中介,无论是它的套接字,数据库还是文件。如果这不是您想要的,那么我建议您澄清情况以及为什么需要共享内存而不是这样的内容。

答案 1 :(得分:1)

我认为你正在寻找的是这样的东西:

#web.rb
require './functions'

print_value("apple")

#rufus.rb
require './functions'

print_value("not apple")

#functions.rb

def print_value(value)
  puts value
end

调用web.rb将返回字符串Apple。