2011年10月29日

[ruby-list:48503] GAEにてundefined method ssl?のエラー原因について

はじめまして、八寿(やじゅ)と申します。

今更ですが、GAE上でSinatraを動かしたいと思い挑戦しておりますが
下記のエラーが発生してしまいます。MacとWindowsのどちらでも発生している現象です。(CRuby1.8.7、JRuby1.6.4を使用)
org.jruby.rack.RackInitializationException: undefined method `ssl?'
for class `Sinatra::Request'

Rack::Request(rack 1.3.4)には、ssl?は下記のように定義されております。

def ssl?
scheme == 'https'
end

なお、この質問10/20にGoogleグループの「Google App Engine for JRuby 」にしておりますが未だ回答は頂けておりません。

実はRubyはここ最近始めたばかりで、細かい仕様については把握出来てない部分がありますのでご了承ください。

自分なりに調べたかぎりでは、Sinatraを使わなくてもこの現象が起きるようです。
検証用に下記のソース作成しました、Rack::Requestを継承したRequest2の「alias sequre? ssl?」のところで
undefined method `ssl?'が発生します。
ところが、Fooを継承したBarの「alias sequre? ssl?」ではエラーとはなりません。
この違いに何か解決方法が隠れているのかと思っております。
今はコメントしてありますが、「alias sequre? ssl?」を「def sequre? ssl? end」にするとエラーが出なくなり正常に動作します。

原因が分かる方がおられれば、ご教授お願いします。

require 'rack/request'
require 'rack/response'

SIMPLE_CONTENT = <<__EOS__
<html>
<body>
<form method="POST" action="/">
<input type="text" name="n" />
<input type="submit" />
</form>
</body>
</html>
__EOS__

class Foo
@@a = 2

def ssl?
@@a == 1
end
end

class Bar < Foo
alias sequre? ssl?

# def sequre?
# ssl?
# end
end

class Request2 < Rack::Request
alias secure? ssl?
end

class Simple
def call(env)
req = Request2.new(env)
res = Rack::Response.new{|r|
case
when req.get?
r.write SIMPLE_CONTENT
when req.post?
r.write "Hello, #{req['n']}!!"
#bar = Bar.new
#r.write "<br>Result=" + bar.sequre?.to_s
end
}
res.finish
end
end

run Simple.new


投稿者 xml-rpc : 2011年10月29日 10:20
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/107040
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。