![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
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件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
>毎回プロセス(VM?)を起動しない方法ってのがJAVAサーバってのなら
あるんですか?
そもそもJavaサーバーは、Javaでできているわけで、当たり前だがJava仮想マシン上で動いている。したがって、JRubyはCGIなんかでなく、そのままJavaのサーブレットから実行できる(サーブレットというのはJavaサーバーで動くJavaプログラム)。つまり、新しいタスクとして起動するのでなく、動いているJavaプログラム(サーブレット)の1つのスレッドとして動くだけなので、実行はかなり軽い。
logger_manさん、ご回答有難うございます。
自分でも調べてみました。
HttpServletクラスを使ってapacheサーバだったらTomcatで動かすってのが概要のようですね。
cgiの骨格はJAVAで作って、呼び出すクラスをJRubyで作る程度が現実的
な線なんですね。
JRubyはruby(の文法)からJAVAのクラスを呼び出すことが出来る
そうですが、cgi作成に於いては、出番は無いようですね。
No.1
- 回答日時:
うーん。
これ、まさか(Javaサーバーではなく)普通のWebサーバーでCGIとしてJRubyを動かす、ということだろうか。JRubyだと、CGIとして実行させるには、毎回、Java仮想マシンを立ち上げることになる。これはコストがかなり高い(サーバーのリソースを大きく消費する)と思う。あまりいい方法とは思えないな。Javaサーバー上ならいざ知らず、普通のWebサーバーで、毎回JRubyをCGIとして起動するのはいくらなんでもサーバーに無駄に負荷をかけすぎないか?
RubyではなくJRubyを利用するというのは、Java仮想マシン上でメインのプログラムが動いており、Rubyを起動するより仮想マシン内でJRubyを起動したほうがコストがかからないケースに限られるように思う。実際に利用されている例を見ると、ほとんどが「Javaのサーブレットコンテナで、JRubyを使いRuby on Railsを動かす」といったものばかりのようだ。CGIの機能だけを単独でJRubyで使う、という事例はほとんど見られないな。これはやっぱり現実的でないということじゃないだろうか。
logger_manさん、ご回答有難うございます。
>毎回JRubyをCGIとして起動するのはいくらなんでもサーバーに無駄に負荷をかけすぎないか?
JAVAでcgi作った事がないので、よくわからないのですが、
毎回プロセス(VM?)を起動しない方法ってのがJAVAサーバってのなら
あるんですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- CGI cgiの注釈が出来ない 2 2022/04/27 09:15
- Ruby Ruby / passenger のインストールについて 1 2023/01/30 18:31
- Ruby Ruby on Railsでサーバーを立ち上げるには 1 2022/08/28 16:16
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Pythonって何のソフトで動くん...
-
パソコンに何かが勝手にダウン...
-
latexでのエラー
-
PC版のMinecraftが応答なしにな...
-
EXCEL-VBAでコマンド...
-
VB.NETでボタンのクリックイベ...
-
ディスクデフラグ
-
あるプログラムから別のをプロ...
-
scanf と gets について
-
Rubyの rails runnerについて
-
eclipseで、「ポート番号が使用...
-
管理者として実行を毎回すると...
-
【JRuby】でcgi
-
Craving Explorerのバージョン...
-
A-oneのラベル屋さんについて
-
ラベル屋さんと言うソフトのフ...
-
何度もすいませんね。アバター...
-
NEC SmartVision をバージョン...
-
iPod touchのバージョンアップ...
-
添付ファイルが開かない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パソコンに何かが勝手にダウン...
-
Excel実行時エラー-2146959355?
-
Pythonって何のソフトで動くん...
-
latexでのエラー
-
エクセルVBA、ステップモードと...
-
PC版のMinecraftが応答なしにな...
-
eclipseで、「ポート番号が使用...
-
管理者として実行を毎回すると...
-
パソコンのスクリーンセーバー...
-
VB.NETでボタンのクリックイベ...
-
chatGPTで次々と質問をしていく...
-
EXCEL-VBAでコマンド...
-
VB.NETでDataTableにデータ追加...
-
Windows10 で青鬼を遊びたいの...
-
プログラム実行中に強制停止さ...
-
COBOLで集団項目から符号...
-
VBA コントロールパネルの機能...
-
【急いでます!】pythonでキー...
-
ターミナルからemacsへのコピペ...
-
ランタイム関数とは何ですか?
おすすめ情報