我在同一台计算机(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更新变量?或者磁盘上的某种状态文件?
答案 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。