• 締切済み

【JRuby】でcgi

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で書くようにお手軽にはできない 物なのでしょうか?

みんなの回答

noname#94983
noname#94983
回答No.2

>毎回プロセス(VM?)を起動しない方法ってのがJAVAサーバってのなら あるんですか? そもそもJavaサーバーは、Javaでできているわけで、当たり前だがJava仮想マシン上で動いている。したがって、JRubyはCGIなんかでなく、そのままJavaのサーブレットから実行できる(サーブレットというのはJavaサーバーで動くJavaプログラム)。つまり、新しいタスクとして起動するのでなく、動いているJavaプログラム(サーブレット)の1つのスレッドとして動くだけなので、実行はかなり軽い。

kingfruits
質問者

お礼

logger_manさん、ご回答有難うございます。 自分でも調べてみました。 HttpServletクラスを使ってapacheサーバだったらTomcatで動かすってのが概要のようですね。 cgiの骨格はJAVAで作って、呼び出すクラスをJRubyで作る程度が現実的 な線なんですね。 JRubyはruby(の文法)からJAVAのクラスを呼び出すことが出来る そうですが、cgi作成に於いては、出番は無いようですね。

noname#94983
noname#94983
回答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で使う、という事例はほとんど見られないな。これはやっぱり現実的でないということじゃないだろうか。

kingfruits
質問者

お礼

logger_manさん、ご回答有難うございます。 >毎回JRubyをCGIとして起動するのはいくらなんでもサーバーに無駄に負荷をかけすぎないか? JAVAでcgi作った事がないので、よくわからないのですが、 毎回プロセス(VM?)を起動しない方法ってのがJAVAサーバってのなら あるんですか?

関連するQ&A

  • rubyのファイルを実行できません。

     Debian(Woody)の環境です。 #find ./ -name ruby ./usr/bin/ruby ./usr/share/doc/ruby ./usr/doc/ruby ./usr/lib/ruby があり、/usr/binにrubyのファイルが確認できます。 $ruby -v ruby 1.6.7 (2002-03-19) [i386-linux] が出ます。pathが通っています。 $ ruby -e 'print "hello World\n"' で hello World もちゃんどでます。 しかし、vi hello.rbで、中には ------------------- #!/usr/bin/ruby print "Hello World!\n" --------------------- と、実行権-rwxr-xr-xにします。 %hello.rb では: bash: hello.rb: command not found が出て,実行できませんでした。 ファイルの中に、#!/usr/lib/rubyに代えてもおなじでした。  因みに %env で ... PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11 ... がでます。  アドバイスをよろしくお願いします。

    • 締切済み
    • CGI
  • @PAGESのCGIについて

    @PAGESに登録してみて簡単なcgiをrubyで書いたのですがエラーになり通りません 本当なら@PAGESの掲示板に書くべきなのでしょうが凍結されていて書きこめませんでした わかる方助言をいただけるとありがたいです #!/usr/local/bin/ruby print "Content-type: text/html\n\n" print "Hello World" 拡張子はcgiにしてパーミッションは755です

    • ベストアンサー
    • CGI
  • Rubyのcgiが動作しません。

    下記のように4行のルビーのcgiを作りました。 ファイル名rb.cgi #!/usr/bin/ruby print <<EOF あああ EOF これをRubyを提供しているapacheサーバにアップロードし パーミッションを777にしました。 文字コードはEUC、改行はLFのみです。 しかし、Internal Server Errorが表示されます。 そこで、サーバにログオンし、このcgiファイルの ディレクトリまで移動し、./rb.cgiを実行すると あああと表示されます。また、このcgiファイルと 同一ディレクトリにあるparlのcgi(掲示板)は 正常動作しています。 どこが間違っているのでしょうか?

    • ベストアンサー
    • CGI
  • CGI

    javaで書いたプログラムをCGIで使いたいのですが。 Cの場合、CGIで使うために、 #include <stdio.h> main(){ printf("Content-type: text/plain\n\n"); printf("Hello C world!\n"); } というように、「Content-type: text/plain」と加えてッ改行を2回しています。 この、「~.c」のファイルを、コンパイル&実行するとき、[~.cgi」というファイル名に出力するように、 javaのプログラム class HelloWorld{ static public void main(String args[]){ System.out.println("Hello World!"); } } には何を加えて、コンパイルの際、どうすれば、「~.cgi」になるのか教えてください。 コンパイらーはj2sdkです。

    • ベストアンサー
    • Java
  • rubyにてhello worldを表示させたいの

    rubyにてhello worldを表示させたいのですがNo such file or directory -- hello_world.rb (LoadError)と出てきて困ってます。解決策がわかりましたらご教示願えますでしょうか? macにてrubyのプログラミングを始めようとしているものです。 下記サイトを参照しつつ同じように行い環境構築をいたしました。 (バージョンは最新のにしました。) http://pplog.org/?p=1845 まず手始めにhelloworldという文字の表示をしたく下記サイトを参照しつつ hello_world.rbというファイルを作りました。 http://www.atmarkit.co.jp/ait/articles/1402/27/news042_2.html -------- #!/usr/bin/env ruby # encoding: utf-8 puts "Hello World!" -------- その後、ターミナルで下記の通り入力し、実行しました。 ruby hello_world.rb しかし、helloworldとでずにNo such file or directory -- hello_world.rb (LoadError) という文字が出ました。 ※原因が「hello_world.rb」ファイルの#にあるのかと考え#抜きのソースも入力し実行しましたがダメでした。 何が原因であるのかわからず途方に暮れております。 環境構築は同じステップをふみ再確認しましたが、問題がないようです。 「hello_world.rb」ファイルはFinderの「書類」という項目の中に格納致しましたが、 ここに原因があるのでしょうか? ネットで原因を調べてもよくわからず困っております。 もしわかる方がおりましたら、解説願えますでしょうか? こんな初歩的なところで躓いているようでは適正はないのかもしれませんが、 どうか宜しくお願いします。 説明不足の点があるかと思いますので、ご指摘を受けましたら、 追記致します。

  • Ruby vim 実行の仕方

    Rubyをvimで書いたので、実行しようとしたのですが、実行できないです。何がダメなのでしょうか? 手順としては、 vimで puts("Hello World!")と書きました。 w hello_ruby.rbと書いて保存しました。 コマンドプロンプトを開いて、hello_ruby.rbと入れて、Enterを押したのですが、 ’hello_ruby.rb’は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。 と出ます。 コマンドプロンプトで、ruby -v と入れると、Rubyのバージョンは出てきます。 何がいけないのでしょうか?修正の仕方を教えてください。 詳しい方いらっしゃいましたら、よろしくお願い致します。

    • ベストアンサー
    • Ruby
  • CentOS環境でのRubyOnRailsインストール

    お世話になります。CentOSの環境でRubyOnRailsのインストールを行いたいのですが、gemコマンドでエラーが出てしまいます。 で、再度rubygemのインストールを考えておりますが、うまくインストールできない状態です。 2点確認させて頂きたいのですが、 1) gemコマンドがエラーとなる理由。(Rubyとのバージョンが異なるため?) 2) rubygemsをyumでインストール可能とできるような、/etc/yum.repos.d/に設定するURL。 修正方法が他にございましたら、合わせてご教示頂ければ幸いです。 ・インストール # yum --enablerepo=c4-testing install ruby ruby-docs ri ruby-libs ruby-mode ruby-tcltk ruby-irb rdoc ruby-devel Is this ok [y/N]: y Downloading Packages: (1/9): ruby-tcltk-1.8.5-5 100% |=========================| 1.6 MB  00:03 (2/9): ruby-1.8.5-5.el4.c 100% |=========================| 272 kB  00:00 (3/9): ruby-irb-1.8.5-5.e 100% |=========================| 67 kB  00:00 (4/9): ruby-docs-1.8.5-5. 100% |=========================| 1.4 MB  00:05 (5/9): ruby-devel-1.8.5-5 100% |=========================| 503 kB  00:01 (6/9): ruby-ri-1.8.5-5.el 100% |=========================| 1.7 MB  00:03 (7/9): ruby-libs-1.8.5-5. 100% |=========================| 1.5 MB  00:03 (8/9): ruby-rdoc-1.8.5-5. 100% |=========================| 132 kB  00:00 (9/9): ruby-mode-1.8.5-5. 100% |=========================| 52 kB  00:00 Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction  Updating : ruby-libs          ####################### [ 1/13]  Updating : ruby             ####################### [ 2/13]  Installing: ruby-irb           ####################### [ 3/13]  Installing: ruby-rdoc          ####################### [ 4/13]  Installing: ruby-tcltk          ####################### [ 5/13]  Installing: ruby-docs          ####################### [ 6/13]  Updating : ruby-devel          ####################### [ 7/13]  Installing: ruby-ri           ####################### [ 8/13]  Installing: ruby-mode          ####################### [ 9/13]  Cleanup  : ruby             ####################### [10/13]  Removing : irb             ####################### [11/13]  Cleanup  : ruby-devel          ####################### [12/13]  Cleanup  : ruby-libs          ####################### [13/13] # ruby -v ruby 1.8.5 (2006-08-25) [i386-linux] # export RUBYLIB=/usr/lib/ruby/site_ruby/1.8 # which gem /usr/bin/gem # /usr/bin/gem -v /usr/bin/gem:8:in `require': no such file to load -- rubygems (LoadError) from /usr/bin/gem:8 # find / | grep rubygem /usr/src/ruby-1.9.0-2/lib/rubygems.rb /usr/src/ruby-1.9.0-2/lib/rubygems /usr/src/ruby-1.9.0-2/lib/rubygems/local_remote_options.rb /usr/src/ruby-1.9.0-2/lib/rubygems/security.rb /usr/src/ruby-1.9.0-2/lib/rubygems/gem_openssl.rb /usr/src/ruby-1.9.0-2/lib/rubygems/platform.rb /usr/src/ruby-1.9.0-2/lib/rubygems/config_file.rb /usr/src/ruby-1.9.0-2/lib/rubygems/ext … /usr/lib/ruby/1.9.0/rubygems.rb /usr/lib/ruby/1.9.0/rubygems /usr/lib/ruby/1.9.0/rubygems/local_remote_options.rb /usr/lib/ruby/1.9.0/rubygems/security.rb /usr/lib/ruby/1.9.0/rubygems/gem_openssl.rb /usr/lib/ruby/1.9.0/rubygems/platform.rb /usr/lib/ruby/1.9.0/rubygems/config_file.rb /usr/lib/ruby/1.9.0/rubygems/ext /usr/lib/ruby/1.9.0/rubygems/ext/rake_builder.rb /usr/lib/ruby/1.9.0/rubygems/ext/ext_conf_builder.rb /usr/lib/ruby/1.9.0/rubygems/ext/configure_builder.rb # yum install rubygems Loading "fastestmirror" plugin No Match for argument: rubygems Nothing to do

  • Tremaで簡単なプログラムが実行できません。

    ホームにhello_world.rbを作りました。 class HelloController < Controller def start puts "Hello, World!" end end と書きました。trema run hello_trema.rbとやると、大量のエラーがでました… /var/lib/gems/2.2.0/gems/trema-0.8.4/lib/trema/command.rb:40:in `load': cannot load such file -- hello_trema.rb (LoadError) from /var/lib/gems/2.2.0/gems/trema-0.8.4/lib/trema/command.rb:40:in `run' from /var/lib/gems/2.2.0/gems/trema-0.8.4/bin/trema:54:in `block (2 levels) in <module:App>' from /var/lib/gems/2.2.0/gems/gli-2.13.4/lib/gli/command_support.rb:126:in `call' from /var/lib/gems/2.2.0/gems/gli-2.13.4/lib/gli/command_support.rb:126:in `execute' from /var/lib/gems/2.2.0/gems/gli-2.13.4/lib/gli/app_support.rb:296:in `block in call_command' from /var/lib/gems/2.2.0/gems/gli-2.13.4/lib/gli/app_support.rb:309:in `call' from /var/lib/gems/2.2.0/gems/gli-2.13.4/lib/gli/app_support.rb:309:in `call_command' from /var/lib/gems/2.2.0/gems/gli-2.13.4/lib/gli/app_support.rb:83:in `run' from /var/lib/gems/2.2.0/gems/trema-0.8.4/bin/trema:260:in `<module:App>' from /var/lib/gems/2.2.0/gems/trema-0.8.4/bin/trema:14:in `<module:Trema>' from /var/lib/gems/2.2.0/gems/trema-0.8.4/bin/trema:12:in `<top (required)>' from /usr/local/bin/trema:23:in `load' from /usr/local/bin/trema:23:in `<main>' ruby -vと打つとruby 2.2.3p173、trema -vと打つとVERSION 0.8.4と出てきます。どうすればよいでしょうか?よろしくお願いします。(Ubuntu14.04)

    • ベストアンサー
    • Ruby
  • rubyがInternalServerError

    こんばんは。 自鯖にて初めてrubyを動かそうとしたところInternalServerError(500エラー)が帰ってきます。 まず、httpd.confに ---------------------- AddHandler cgi-script .cgi .rb ---------------------- と追加しました(このため.htaccessは作成しなくていいと思う)。 コマンドラインにて[which ruby][whereis ruby]を使い、[/usr/bin/ruby]にrubyがあることはわかるのですが、エラーが出てしまいます。 [test.rb] ---------------------- #!/usr/bin/ruby print "Content-type: text/html\n\n" print "test" ---------------------- 上記プログラムには755のパーミッションを与えています。 上記のフォルダにはCGI実行権が与えられています。 上記のフォルダではCGIはしっかりと動きます。 上記のプログラムはコマンドライン上[ruby test.rb]では動きます。 また、他のサイトもいろいろ調べましたが #!/usr/bin/env ruby #!ruby #!/usr/local/bin/ruby どのいパスでもエラーがでました。 解決方法を教えてください。 サーバ ---------------------- CentOS 5.4Final Apache 2.2.3 Ruby 1.8.5 ----------------------

  • CGI timeoutって? IISでのcgi設定

    すみません質問させてください。 今、XPでIISをインストールしてCGIが動くようにしてるんですが うまくいきません。 http://localhost/hello.cgi というurlで実行できると思うんですが、 いつまでも読み込んでるだけで、実行されない感じです。 CGI timeoutといわれます。 実行するCGIはHELLOと表示する単純なものです。 また、.cgiファイルは実行プログラムをC:\perl\bin\perl.exeに 指定しています。 IISでは、規定のWEBサイトのプロパティ>ホームディレクトリの 「構成」で.cgiの実行ファイルをC:\perl\bin\perl.exeに指定しています。 とりあえずやるだけやったと思ってるんですが、うまくいかないのはどうしてでしょう。 よろしくお願いします。

    • 締切済み
    • CGI

専門家に質問してみよう