0

ネットワークに関する情報を2つの異なるファイルに収集するsinatraアプリをrubyで作成しています。最初の.csvは、ネットワーク内のすべてのワークステーションのIPアドレスと名前に関する情報を収集します。2番目の.txtは、Asteriskサーバーに読み込まれ、指定されたIPアドレスにリンクしているアクティブなSIPチャネルに関する情報を収集します。

私のアプリは、これら2つのファイルから情報をコンパイルし、現在特定のステーションにログインしているユーザーを照合するWebページにテーブルを作成しているだけです。ただし、アプリをリアルタイムで使用するように見せたいです。2つのファイルは5分ごとに自動的に更新されますが、アプリによって読み取られているファイルが上書きされているため、アプリの出力は変更されません。アプリが書き込まれた後に「新しい」ファイルを読み取るようにリグを設定する方法はありますか?

私はスタックオーバーフローについて掘り下げました、そして私はPythonユーザーがそれらを書き換える前にそれらのファイルの変更を単に監視するための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

ファイルを閉じないために、プログラムが「新しい」ドキュメントを開かない可能性はありますか?ここでブレインストーミングしようとしています。

4

1 に答える 1

0

何が起こっているのか全体の構造を知るのは難しいですが、ええ、5分ごとに呼び出され、ファイルの読み取りを行うコードが何であれ、呼び出すたびにそのコードでファイルが閉じられ、再度開かれるようにします。それはあなたの問題を解決するはずです。

より堅牢な結果を得るために、データベースアプローチへの切り替えを検討することもできます。

于 2012-08-14T21:11:04.690 に答える