Ruby 刷新sinatra应用程序读取更新的文件
我正在用ruby编写一个sinatra应用程序,它将我的网络信息收集到两个不同的文件中。第一个是.csv,它收集有关网络中所有工作站的IP地址和给定名称的信息。第二个是.txt,读入星号服务器并收集链接到指定IP地址的活动SIP通道的信息 我的应用程序只是从这两个文件中编译信息,并在网页上创建表格,以匹配当前登录特定站点的用户。然而,我希望该应用程序假装实时使用。我让这两个文件每5分钟自动更新一次,但由于应用程序读取的文件被覆盖,应用程序的输出不会改变。有没有一种方法可以使应用程序在写入“新”文件后读取这些文件 我对堆栈溢出进行了深入研究,我看到了一些东西,让python用户在重写这些文件之前只需观察这些文件中的更改,这将非常好。有ruby版本吗?此外,我希望该应用程序可以随时访问,并且可能只有在需要更新某些内容时才“刷新”,这样才有意义 当我意识到我在阅读完文件后再也不会关闭它们时,我也有了一个有趣的顿悟。我不会发布整个应用程序,但这里是我阅读文件的地方:Ruby 刷新sinatra应用程序读取更新的文件,ruby,sinatra,refresh,readfile,Ruby,Sinatra,Refresh,Readfile,我正在用ruby编写一个sinatra应用程序,它将我的网络信息收集到两个不同的文件中。第一个是.csv,它收集有关网络中所有工作站的IP地址和给定名称的信息。第二个是.txt,读入星号服务器并收集链接到指定IP地址的活动SIP通道的信息 我的应用程序只是从这两个文件中编译信息,并在网页上创建表格,以匹配当前登录特定站点的用户。然而,我希望该应用程序假装实时使用。我让这两个文件每5分钟自动更新一次,但由于应用程序读取的文件被覆盖,应用程序的输出不会改变。有没有一种方法可以使应用程序在写入“新”文
#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
有没有可能因为我从不关闭文件,程序就永远不会打开“新”文档?我只是想在这里集思广益。很难说出正在发生的事情的总体结构,但是,是的,无论每5分钟调用一次代码,然后读取哪些文件,我都会确保每次调用都会在该代码中关闭和重新打开文件。那应该能解决你的问题
你也可以考虑切换到数据库方法以获得更健壮的结果。
嘿,Brad,很难告诉你正在发生的事情的整体结构,但是,不管是什么代码,每5分钟被调用一次,然后文件读取,我会确保文件被关闭并在每次调用的代码中重新打开。那应该能解决你的问题。也许有更好的办法,但我想那会管用的。嘿,谢谢!你知道我是需要在循环之前还是之后关闭它们吗?用文件中的每个条目关闭它们是没有意义的。我本以为它会像File.close那样简单,但这给了我一个错误…”“未定义的方法close for File class”File=File.open(“temp.txt”,“r”);谢谢你,乔纳。需要一个关于如何做到这一点的提示,但它仍然无法解决问题。我现在正在考虑采取不同的方法。我将不使用需要刷新的文本文件,而是将信息添加到MySql表中。从那里,我将实时获取信息。有人认为这种解决方案有什么问题吗?这似乎是一种更有效的方法,尤其是当你有很多文件的时候。