2012-08-14 2 views
0

내 네트워크에 관한 정보를 두 개의 다른 파일로 수집하는 ruby에 sinatra 앱을 쓰고 있습니다. 첫 번째 .csv 파일은 네트워크의 모든 워크 스테이션의 IP 주소와 이름에 대한 정보를 수집합니다. 두 번째, .txt는 Asterisk 서버를 읽고 지정된 IP 주소로 연결되는 활성 SIP 채널에 대한 정보를 수집합니다.업데이트 된 파일에서 읽는 sinatra 앱 새로 고침

내 앱은이 두 파일의 정보를 컴파일하고 현재 특정 방송국에 로그인 한 사용자와 일치하는 웹 페이지에 표를 만드는 것입니다. 그러나, 나는 실시간으로 쓸모가있는 앱을 원한다. 두 파일은 매 5 분마다 자동으로 업데이트되지만 앱이 읽는 파일은 덮어 쓰여지기 때문에 앱의 출력은 변경되지 않습니다. 앱이 작성된 후 '새로운'파일을 읽도록 앱을 조작 할 수있는 방법이 있습니까?

저는 스택 오버플로를 파헤쳐 보았습니다. 파이썬 사용자가 Kqueue를 언급하여 파일을 다시 작성하기 전에 해당 파일의 변경 사항을 단순히보아야한다는 것을 알았습니다. 거기에 루비 버전이 있습니까? 또한, 나는 항상 액세스 할 수있는 응용 프로그램을 원하고 어쩌면 뭔가를 업데이 트해야 할 때 "새로 고침", 그래서 말이 될 것입니다.

내가 읽은 후에 파일을 닫지 않을 것이라는 것을 깨달았을 때 나는 재미있는 작은 주현절을 보냈다. 나는 전체 응용 프로그램을 게시,하지만 여기에 내가 파일을 읽을 어디하지 않습니다

#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 

는 내가 파일을 닫습니다하지 않기 때문에, 프로그램은 결코 "새로운"문서를 열어 없다는 것을 가능을? 여기에서 브레인 스토밍하려고합니다.

+1

헤이 브래드, 무슨 일이 일어나고 있는지 전반적인 구조를 말하기는 어렵지만 모든 코드가 5 분마다 호출되고 차례로 파일을 읽는 동안 파일이 닫혔는지 다시 확인해야합니다. 모든 전화와 함께 그 코드. 그것은 당신의 문제를 해결해야합니다. 그것을하는 더 좋은 방법이있을 수 있지만, 나는 그 방법이 효과가 있다고 생각합니다. – Jonah

+0

안녕하세요. 내가 루프를 실행하기 전이나 후에 루프를 닫아야하는지 알 수 있습니까? 파일의 각 항목마다 파일을 닫는 것은 의미가 없습니다. 나는 그것이'File.close'처럼 간단 할 것이라고 생각했을 것이다. 그러나 그것은 나에게 오류를 준다 ... "File 클래스의 정의되지 않은 메소드 닫기" –

+0

file = File.open ("temp.txt", "r"); file.close – Jonah

답변

0

무슨 일이 일어나고 있는지 전반적인 구조를 말하기는 어렵지만 모든 코드가 5 분마다 호출되고 차례로 파일을 읽는 동안 파일을 닫은 다음 다시 열어야합니다. 모든 전화와 함께. 그것은 당신의 문제를 해결해야합니다.

보다 강력한 결과를 얻으려면 데이터베이스 접근 방식으로 전환하는 것도 고려해보십시오.