我正在用红宝石编写一个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
是否有可能因为我从不关闭文件,程序永远不会打开“新”文件?只是想在这里集体讨论。
答案 0 :(得分:0)
很难说出发生了什么的整体结构,但是,无论每隔5分钟调用一次代码,然后又进行文件读取,我会确保文件已关闭并在该代码中重新打开每次通话。这应该可以解决你的问题。
您也可以考虑切换到数据库方法以获得更强大的结果。