3

FastCGIでApacheを使用してRedmineインストールにアクセスすると、このようなエラーが発生します。その理由は何でしょうか?

/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

ありがとう、マーク

4

1 に答える 1

1

何が起こっているのか正確にはわかりませんが、エラー自体は buf[0] が文字列であり、ビットごとのシフト演算子 (>>) に応答しないことを示しています。

これがこれをデバッグする 100% 正しい方法であるかどうかはわかりませんが、その文字列を解凍しようとすると、10 進数の値が得られます。

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

http://www.asciitable.com/で調べてみると、明らかに「シフトイン」文字です。そのため、どういうわけか「シフトイン」文字がバッファによって読み取られ、その文字に対してビット単位のシフトを実行しようとすると、ルビーが文句を言います。

処理中のファイルをチェックして、疑わしい文字や不正な文字がそこにあるかどうかを確認します。

于 2013-02-05T17:35:04.060 に答える