-1

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

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

cron 有什么方法可以直接访问 $webserver_status 变量吗?

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

  • ruby 1.8.7 (2010-08-16 补丁级别 302) [i386-mingw32]
  • 网络服务器始终运行
  • 我有 cron 代码的生产和测试版本
4

2 回答 2

2

请参阅我在此答案中提出的建议。除非我在您的场景中遗漏了某些东西,否则问题基本上是相同的。根据您的需要,有许多可能的解决方案。

编辑

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

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

于 2012-05-24T15:10:26.410 回答
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。

于 2012-05-24T00:36:27.770 回答