2013-05-30 33 views
0

我的環境:紅寶石1.9.3p392(2013年2月22日修訂39386)x86_64的Linux的]紅寶石CGI不會返回方法調用,但將返回參數

的事情是,我可以使紅寶石返回的參數通過GET發送。但是當我試圖在if/else中使用它們作爲我的方法的爭論時,ruby不會返回任何內容,並且最終會出現空白頁。

pH值和下午返回正確:

http://127.0.0.1/cgi-bin/test.rb?hostname=node00.abit.dk&macadd=23:14:41:51:63 

回報:

node00.abit.dk 23:14:41:51:63 

連接到數據庫(MySQL的)工作正常

當我測試的方法newHostName它正確輸出:

puts newHostName 

回報率(這是正確的)

node25.abit.dk 

代碼:

#!/usr/bin/ruby 
require 'cgi' 
require 'sequel' 
require 'socket' 
require 'timeout' 

DB = Sequel.connect(:adapter=>'mysql', :host=>'localhost', :database=>'nodes', :user=>'nodeuser', :password=>'...') 

#cgi-part to work 
#takes 2 parameters: 
#hostname & macadd 
cgi = CGI.new 
puts cgi.header 

p = cgi.params 
ph = p['hostname'] 
pm = p['macadd'] 

def nodeLookup(hostnameargv) 
     hostname = DB[:basenode] 
     h = hostname[:hostname => hostnameargv] 

     h1 = h[:hostname] 
     h2 = h[:macadd] 
     ary = [h1, h2] 
     return ary 
end 

def lastHostName() 
    #TODO: replace with correct sequel-code and NOT raw SQL 
    DB.fetch("SELECT hostname FROM basenode ORDER BY id DESC LIMIT 1") do |row| 
     return row[:hostname] 
    end 
end 

def newHostName() 
    org = lastHostName 
    #Need this 'hack' to make ruby grep for the number 
    #nodename e.g 'node01.abit.dk' 
    var1 = org[4] 
    var2 = org[5] 
    var3 = var1 + var2 
    sum = var3.to_i + 1 
    #puts sum 
    sum = "node" + sum.to_s + ".abit.dk" 
    return sum 
end 

def insertNewNode(newhost, newmac) 
    newnode = DB[:basenode] 
    newnode.insert(:hostname => newhost, :macadd => newmac) 

    return "#{newnode.count}" 
end 

#puts ph 
#puts pm 

#puts newHostName 
cgi.out() do 
    cgi.html do 
     begin 
      if ph == "node00.abit.dk" 
       puts newHostName 
      else 
       puts nodeLookup(ph) 
      end 
     end 
    end 
end 

我覺得我在這裏失去了一些東西。很感謝任何形式的幫助!

// M00kaw

回答

0

如何修改代碼的最後幾行? CGI HTML生成方法取塊,併產生塊的返回值作爲其內容。因此,您應該將newHostNamenodeLookup(ph)作爲傳遞給cgi.html()而不是puts sth的塊的返回值,將內容打印到您的終端並返回nil。這就是爲什麼cgi.html()得到一個空字符串(nil.to_s)。

#puts newHostName 
cgi.out() do 
    cgi.html do 
    if ph == "node00.abit.dk" 
     newHostName 
    else 
     nodeLookup(ph) 
    end 
    end 
end 

附:這是傳統的用2個空格縮進您的Ruby代碼:-)

+0

謝謝你幫我出:> 我要解決的2位的事.. 從的if/else沒刪除「看跌期權」沒有幫助。它仍然不會輸出任何東西:/ – M00kaw

+0

看看你的cgi服務器的日誌文件。您可能會在此找到有用的東西。或者,您可以嘗試在調試時不依賴數據庫,只需從'cgi.out()'返回一些硬編碼的字符串來查看是否有效。數據庫連接可能有問題。 –