2013-01-31 84 views
3

當使用Apache和FastCGI訪問我的Redmine安裝時,出現這樣的錯誤。這可能是什麼原因?ruby​​:undefined方法`>>'爲「 x0F」:String(NoMethodError)

/usr/local/rvm/rubies/ruby-1.9.3-p374/lib/ruby/gems/1.9.1/gems/fcgi-0.8.8/lib/fcgi.rb:454:in `read_length': undefined method `>>' for "\x0F":String (NoMethodError) 
     from /usr/local/rvm/rubies/ruby-1.9.3-p374/lib/ruby/gems/1.9.1/gems/fcgi-0.8.8/lib/fcgi.rb:448:in `read_pair' 
     from /usr/local/rvm/rubies/ruby-1.9.3-p374/lib/ruby/gems/1.9.1/gems/fcgi-0.8.8/lib/fcgi.rb:441:in `parse_values' 
     from /usr/local/rvm/rubies/ruby-1.9.3-p374/lib/ruby/gems/1.9.1/gems/fcgi-0.8.8/lib/fcgi.rb:435:in `parse' 
     from /usr/local/rvm/rubies/ruby-1.9.3-p374/lib/ruby/gems/1.9.1/gems/fcgi-0.8.8/lib/fcgi.rb:195:in `read_record' 
     from /usr/local/rvm/rubies/ruby-1.9.3-p374/lib/ruby/gems/1.9.1/gems/fcgi-0.8.8/lib/fcgi.rb:126:in `next_request' 
     from /usr/local/rvm/rubies/ruby-1.9.3-p374/lib/ruby/gems/1.9.1/gems/fcgi-0.8.8/lib/fcgi.rb:116:in `session' 
     from /usr/local/rvm/rubies/ruby-1.9.3-p374/lib/ruby/gems/1.9.1/gems/fcgi-0.8.8/lib/fcgi.rb:104:in `each_request' 
     from /usr/local/rvm/rubies/ruby-1.9.3-p374/lib/ruby/gems/1.9.1/gems/fcgi-0.8.8/lib/fcgi.rb:36:in `each' 
     from /usr/local/rvm/rubies/ruby-1.9.3-p374/lib/ruby/gems/1.9.1/gems/rack-1.4.4/lib/rack/handler/fastcgi.rb:27:in `run' 
     from /var/www/redmine/public/dispatch.fcgi:21:in `<main>' 

中提到的錯誤行看起來像下面(行號),這是fcgi.rg文件的片段:

453 def self::read_length(buf) 
454  if buf[0] >> 7 == 0 
455  then buf.slice!(0,1)[0] 
456  else buf.slice!(0,4).unpack('N')[0] & ((1<<31) - 1) 
457  end 
458 end 

謝謝, 馬克

回答

1

好吧,我不不知道到底發生了什麼,但錯誤本身告訴你buf [0]是一個字符串,並且它不響應按位移位運算符(>>)。

我不知道這是否是100%調試這個正確的方法,但如果你試圖解開這個字符串,你得到它的十進制值:

irb(main):053:0> "\x0F".unpack "c" 
=> [15] 

如果你看,截至上http://www.asciitable.com/,顯然它是「轉變」字符。所以不知怎的,一個「移入」字符正在被緩衝區讀取,當它試圖對該字符進行按位移時,ruby正在抱怨。

我會檢查它正在處​​理的文件,看看有沒有可疑或非法字符。

相關問題