失敗作

失敗昨を残してみる。

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

ちゃんと検証していないから、意図通りに動かない部分もある。