0

我正在用 ruby​​ 编写一个 sinatra 应用程序,它将有关我的网络的信息收集到两个不同的文件中。第一个是 .csv,收集有关网络中所有工作站的 IP 地址和名称的信息。第二个,.txt,读入 Asterisk 服务器并收集有关链接到指定 IP 地址的活动 SIP 通道的信息。

我的应用程序只是从这两个文件中编译信息并在网页上创建表格,以匹配当前登录到特定站点的用户。但是,我希望该应用程序能够假装实时使用。我有两个文件每 5 分钟自动更新一次,但是由于应用程序正在读取的文件被覆盖,应用程序的输出不会改变。有没有办法安装它,以便应用程序在写入后读取“新”文件?

我已经在堆栈溢出方面进行了研究,并且我已经看到提到 Kqueue 的事情,python 用户可以在重写它们之前简单地观察这些文件中的变化,这真的很好。有红宝石版本吗?此外,我希望该应用程序始终可以访问,并且可能仅在需要更新某些内容时“刷新”,这样才有意义。

当我意识到我在阅读文件后从不关闭文件时,我也有了一个有趣的小顿悟。我不会发布整个应用程序,但这里是我阅读文件的地方:

#Pulls active SIP channels from Asterisk
$sip = {}
File.open('sip.txt').each do |line|
  userid,ip = line.split(" ")
  $sip[ip] = userid[0..3]
end

#Prepares hash of all stations, ip addresses
$machines = {}
CSV.foreach('/Volumes/Scripts/report-51.csv') do |row|
  name = row[1]
  address = row[0]
  $machines[name] = address
end

是否有可能因为我从不关闭文件,程序从不打开“新”文档?只是想在这里集思广益。

4

1 回答 1

0

很难说出正在发生的事情的整体结构,但是,是的,每 5 分钟调用一次任何代码,然后读取文件,我会确保在每次调用时关闭并在该代码中重新打开文件。那应该可以解决您的问题。

您还可以考虑切换到数据库方法以获得更可靠的结果。

于 2012-08-14T21:11:04.690 回答