電子書籍の厳選無料作品が豊富!

JRubyでcgiをためしてみたいです。

先ずは手始めにリクエストを受けると『hello World』をレスポンスするcgiを書いてみました。
JRubyはrubyの文法でOKとのことなので、以下の様に書きました。
require 'cgi'
CGI.new().out({'status'=>'OK','type'=>'text/plain'}){'hello World'}

先ずは、Webサーバに上げる前に、offline modeで試してみようと思い、
DOS窓を開いて、
>jruby cgi.rb
と実行しました。実行結果を以下に記します。
>jruby cgi.rb
(offline mode: enter name=value pairs on standard input)
^Z
C:/Program Files/Java/jruby-1.3.1/bin/../lib/ruby/1.8/cgi.rb:1124:in `initializ
_query': undefined method `join' for nil:NilClass (NoMethodError)
from C:/Program Files/Java/jruby-1.3.1/bin/../lib/ruby/1.8/cgi.rb:2276:
n `initialize'
from cgi.rb:3

因みにrubyでの実行結果は以下でした。
>ruby cgi.rb
(offline mode: enter name=value pairs on standard input)
^Z
Status: 200 OK
Content-Type: text/plain
Content-Length: 11

hello World

仮に、jrubyのoffline modeでrubyと同じ結果が出せるようになっても、
その先、Webサーバにどのように仕込んでいくのかも知らないのですが、
jrubyでcgiを書くってことは、rubyで書くようにお手軽にはできない
物なのでしょうか?

A 回答 (2件)

>毎回プロセス(VM?)を起動しない方法ってのがJAVAサーバってのなら


あるんですか?

そもそもJavaサーバーは、Javaでできているわけで、当たり前だがJava仮想マシン上で動いている。したがって、JRubyはCGIなんかでなく、そのままJavaのサーブレットから実行できる(サーブレットというのはJavaサーバーで動くJavaプログラム)。つまり、新しいタスクとして起動するのでなく、動いているJavaプログラム(サーブレット)の1つのスレッドとして動くだけなので、実行はかなり軽い。
    • good
    • 0
この回答へのお礼

logger_manさん、ご回答有難うございます。

自分でも調べてみました。
HttpServletクラスを使ってapacheサーバだったらTomcatで動かすってのが概要のようですね。
cgiの骨格はJAVAで作って、呼び出すクラスをJRubyで作る程度が現実的
な線なんですね。

JRubyはruby(の文法)からJAVAのクラスを呼び出すことが出来る
そうですが、cgi作成に於いては、出番は無いようですね。

お礼日時:2009/09/25 17:34

うーん。

これ、まさか(Javaサーバーではなく)普通のWebサーバーでCGIとしてJRubyを動かす、ということだろうか。

JRubyだと、CGIとして実行させるには、毎回、Java仮想マシンを立ち上げることになる。これはコストがかなり高い(サーバーのリソースを大きく消費する)と思う。あまりいい方法とは思えないな。Javaサーバー上ならいざ知らず、普通のWebサーバーで、毎回JRubyをCGIとして起動するのはいくらなんでもサーバーに無駄に負荷をかけすぎないか?

RubyではなくJRubyを利用するというのは、Java仮想マシン上でメインのプログラムが動いており、Rubyを起動するより仮想マシン内でJRubyを起動したほうがコストがかからないケースに限られるように思う。実際に利用されている例を見ると、ほとんどが「Javaのサーブレットコンテナで、JRubyを使いRuby on Railsを動かす」といったものばかりのようだ。CGIの機能だけを単独でJRubyで使う、という事例はほとんど見られないな。これはやっぱり現実的でないということじゃないだろうか。
    • good
    • 0
この回答へのお礼

logger_manさん、ご回答有難うございます。

>毎回JRubyをCGIとして起動するのはいくらなんでもサーバーに無駄に負荷をかけすぎないか?

JAVAでcgi作った事がないので、よくわからないのですが、
毎回プロセス(VM?)を起動しない方法ってのがJAVAサーバってのなら
あるんですか?

お礼日時:2009/09/24 17:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!