2013-01-31 114 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正在抱怨。

我会检查它正在处​​理的文件,看看有没有可疑或非法字符。

相关问题