【问题标题】:Ruby CGI Library: basic code generating 500 internal server errorRuby CGI 库:基本代码生成 500 内部服务器错误
【发布时间】:2013-05-22 17:30:10
【问题描述】:

我正在研究如何使用 ruby​​ 在我的网络服务器上编写 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

我使用的是 Kubuntu 13.04,使用的是 apache2 网络服务器,文件在 /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

【问题讨论】:

  • 你有错误日志吗?
  • 添加了error.log。每次我刷新页面时都会显示这三行。
  • 如果我运行其中一个有效的脚本。像 cgi_escape.rb 一样,我得到的唯一消息是 Favicon 消息(这真的没关系。)虽然这些不使用 CGI 库进行输出,但只有一系列打印语句。
  • 如果包含 Content-Type 标头会发生什么?
  • 我取消了它的注释,但出现了同样的错误。从错误消息的描述来看,我似乎需要关闭一些东西......我是根据 Pickaxe book 1.9 中的一个示例创建的。 (Programming ruby​​ 1.9)但即使直接复制和粘贴书中的代码也行不通。

标签: ruby-on-rails ruby apache cgi


【解决方案1】:

唯一的原因是糟糕的编码...... 除了编码错误之外,主要问题是 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
  }
}

【讨论】:

    猜你喜欢
    • 2011-10-09
    • 2013-11-13
    • 2016-04-24
    • 1970-01-01
    • 2021-06-09
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多