0

Ruby を使用して Web サーバー上で CGI アプリケーションを作成する方法を研究しています。CGI ライブラリを使用して、次のコードを用意しました。

#!usr/bin/ruby
require 'cgi'
#print "Content-type: text/html\r\n\r\n" << Not needed with cgi.out?
cgi = CGI.new('html3')
cgi.out do
  cgi.html do
    cgi.head do
      "\n" + cgi.title {"This is a test"}
    end
    + cgi.body do "\n" +
      cgi.form do "\n" +
        cgi.hr +
        cgi.h1 { "A form: " } + "\n" +
        cgi.textarea("get_text") + "\n" +
        cgi.br +
        cgi.submit
      end
    end
  end
end

私は apache2 Web サーバーを使用して Kubuntu 13.04 を使用しています。ファイルは /usr/lib/cgi-bin ディレクトリにあり、chmod は次のとおりです。

richard@Senjai:~/projects/pickaxe/mini-projects/cgi-bin$ ls -l /usr/lib/cgi-bin/
total 12
-rwxr-xr-x 1 richard richard 170 May 27 13:30 cgi_escape.rb
-rwxr-xr-x 1 richard richard 395 May 27 13:30 cgi_htmlgen.rb
-rwxr-xr-x 1 richard richard 126 May 27 13:30 cgi_test.rb

cgi_test.rb と cgi_escape.rb は問題なく動作するため、パーミッションが問題だとは思いません。

これにより500内部サーバーエラーが発生する理由を知っている人はいますか? これはオフラインの web 開発環境のみであるため、誰かがそれに興味を持っている場合、ページへのリンクを提供することはできません.

Apache2 エラー ログ:

richard@Senjai:/var/log/apache2$ cat error.log 
[Mon May 27 14:06:57 2013] [notice] Apache/2.2.22 (Ubuntu) PHP/5.4.6-1ubuntu1.2 configured -- resuming normal operations
[Mon May 27 14:07:04 2013] [error] [client 127.0.0.1] (2)No such file or directory: exec of '/usr/lib/cgi-bin/cgi_htmlgen.rb' failed
[Mon May 27 14:07:04 2013] [error] [client 127.0.0.1] Premature end of script headers: cgi_htmlgen.rb
[Mon May 27 14:07:04 2013] [error] [client 127.0.0.1] File does not exist: /var/www/favicon.ico
4

1 に答える 1

0

唯一の理由はコーディングの誤りだけです...コーディングエラーは別として、主な問題はCGIメソッドが文字列を返すため、それらをSTDOUTに配置するために印刷が必要であることです(これはhttp応答を返すソケットです)。

これを試してください:

#!/usr/bin/ruby
require 'cgi'
#print "Content-type: text/html\r\n\r\n" << Not needed with cgi.out?
cgi = CGI.new('html3')
print cgi.out {
  cgi.html {
    cgi.head {
       "\n" + cgi.title {"This is a test"}
    } + cgi.body { "\n" } +
    cgi.form { "\n" } +
    cgi.hr +
    cgi.h1 { "A form: " } + "\n" +
    cgi.textarea("get_text") + "\n" +
    cgi.br +
    cgi.submit
  }
}
于 2013-10-16T18:36:28.990 に答える