2013-05-27 33 views
0

我正在学习如何使用ruby在我的web服务器上编写CGI应用程序。使用CGI库,我编写了下面的代码:Ruby CGI库:生成500内部服务器错误的基本代码

#!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 

我使用的Kubuntu 13.04使用的Apache2 web服务器,该文件位于/ usr/lib目录/ cgi-bin目录,并使用chmod如下:

[email protected]:~/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 error.log中:

[email protected]:/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 
+0

你有一个错误日志? –

+0

添加了error.log。每当我刷新页面时,这三行就会显示出来。 – Senjai

+0

如果我运行其中一个工作的脚本。像cgi_escape.rb,我得到的唯一消息是Favicon(这实际上并不重要)。这些并不使用CGI库进行输出,只是使用一系列的打印语句。 – Senjai

回答

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 
    } 
} 
相关问题