失敗作
失敗昨を残してみる。
tempfile版
tempfileを作成する場所の指定する必要があった。
@printers = Array.new @lprcount = params[:count].nil? ? 0 : params[:count].to_i require "tempfile" @printers = Array.new if params[:count].nil? @lprcount = 0 temp = Tempfile.new("lprlist",RAILS_ROOT+'/tmp') pp "temp dir", temp.path else @lprcount = params[:count].to_i #tempを読み込んで、@priに書き出す if FileTest.exist?(RAILS_ROOT+'/tmp'+'/lprlist') pp "find lprlist" pp "temp dir", temp.path temp.open pp "temp open" tmpcount = 0 temp.each{|line| line.split(/,/).each{|lpr| pp "lpr",lpr } } end end strlpr = "" 3.times { if ip_ary[@lprcount].nil? break end lprary = lpr_state(@lprcount+1, ip_ary[@lprcount]) @printers[@lprcount]=lprary strlpr = lprary[0].to_s+","+lprary[1]+","+lprary[2]+","+lprary[3]+","+lprary[4]+","+lprary[5] temp.puts strlpr @lprcount += 1 } temp.close
GCって直ぐに消えちゃうのね・・・
個別ファイル版
Timeoutの問題に気づかせてくれた、ある意味いい奴。
require "socket" usrfile = RAILS_ROOT+"/tmp/lpr/"+Socket.gethostname unless File.file?(usrfile) #ファイルが存在しているの?無かったら作る File.open(usrfile,"w"){|file|} else #タイムスタンプが古かったら内容を消す File.open(usrfile,"w"){} if File.mtime(usrfile).to_date < Date.today.to_date #ファイルを1行ずつ読み込んで、表示用に書き出す @printers = Array.new File.open(usrfile){|file| while line = file.gets @printers << line.split(/::/) end } @lprcount = params[:count].nil? ? 0 : params[:count].to_i #ファイルに書き込む&表示用にも書き込む 3.times { strlpr = "" break if ip_ary[@lprcount].nil? @printers[@lprcount] = lpr_state(@lprcount+1, ip_ary[@lprcount]) strlpr = @printers[@lprcount].join("::") File.open(usrfile, "a"){|file| file.puts strlpr } @lprcount += 1 } end
ちゃんと検証していないから、意図通りに動かない部分もある。