我正在用 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
是否有可能因为我从不关闭文件,程序从不打开“新”文档?只是想在这里集思广益。