Ruby on Rails は初めてです (数日前に使い始めたばかりです)。SMART 情報を含むさまざまなシステム情報を表示するためのシンプルな Web フロントエンドを作成しています。私はこの小さなクラスを作りました:
class SmartValues
attr_reader :data
KEYS = [:id, :name, :flag, :value, :worst, :thresh, :type, :updated, :failed, :raw]
def initialize(devices)
@data = Hash[devices.map {|dev| [dev, SmartValues.getValues(dev)]}]
end
def self.getValues(device)
lines = `sudo /usr/sbin/smartctl -A #{device}`.split("\n")[7..-1].collect! { |line| line.split }
return lines.map { |line| Hash[KEYS.zip line] }
end
end
次のようにコントローラーに含まれていることを除いて、正常に動作します。
class HomeController < ApplicationController
def index
@smart = SmartValues.new(["/dev/sda", "/dev/sdb", "/dev/sdc", "/dev/sdd", "/dev/sde", "/dev/sdf"]).data
end
end
そのため、ページのリクエストごとにsmartctlバイナリが複数回実行される必要があります。情報が定期的に更新されるように、何らかのキャッシュを追加したいと思いますが、すべてのリクエストではありません。それを行う正しいRoR風の方法は何ですか?