3

我正在尝试在 rhtml 中运行嵌入式 ruby​​。

$cat test.rhtml

<html>
<body>
Testing <% foo = "Ruby"; print "#{foo}!" %>
</body>
</html>

它可以从命令行正常工作:

$eruby test.rhtml


<html>
<body>
Testing Ruby!
</body>
</html>

但是在我的 apache 设置中它不起作用。

访问“http://localhost/cgi-bin/test.rhtml”会出现以下错误:

“内部服务器错误

服务器遇到内部错误或配置错误,无法完成您的请求。

请联系服务器管理员 you@example.com 并告知他们错误发生的时间,以及您所做的任何可能导致错误的事情。

服务器错误日志中可能会提供有关此错误的更多信息。”

错误日志说:

[2011 年 1 月 22 日星期六 17:56:07] [错误] [客户端 ::1] (8)Exec 格式错误:'Dir/cgi-bin/test.rhtml' 的执行失败 [1 月 22 日星期六 17:56:07 2011] [错误] [客户端 ::1] 脚本头过早结束:test.rhtml

我已将“eruby”可执行文件复制到“Dir/cgi-bin/”目录并配置 apache(2.2),如下所示:

AddType application/x-httpd-eruby .rhtml
Action application/x-httpd-eruby Dir/cgi-bin/eruby

有任何想法吗?谢谢!

4

2 回答 2

1

您可能至少需要添加,

Content-type: text/html

<html>
....

在您的 eruby 文件的顶部——CGI 脚本负责在内容之前将标头发送回客户端。可能有更多的标头可以发回,但这可能足以开始。

于 2011-01-23T02:47:25.677 回答
0

我在Ubuntu 12.04Ruby 1.8.7上有Apache/2.2.22。我安装了erubis 2.7.0实现并将可执行的 erubis 文件复制到 Apache 的 cgi 文件夹,在我的例子中是 /usr/lib/cgi-bin/erubis。我配置了一个名为 erubis.sh 的 cgi 脚本,通过将这些指令添加到 /etc/apache/httpd.conf 来处理对 .rhtml 文件的请求:

AddType application/x-httpd-eruby .rhtml
Application application/x-httpd-eruby /cgi-bin/erubis.sh

我通过运行以下命令确保启用了 Action 模块:

$ sudo a2enmod action

我创建了这个 bash shell 脚本erubis.sh来处理对嵌入了 ruby​​ 的页面的请求:

#!/bin/bash
echo "Content-type: text/html"
echo
echo "<!DOCTYPE HTML>"
erubis -E Stdout <$DOCUMENT_ROOT$REQUEST_URI

它输出一个最小的 http 标头,然后要求 erubis 处理所请求的包含嵌入式 Ruby 的 .rhtml 文件。Stdout 增强选项似乎需要在正确的位置获得嵌入式 Ruby 块的输出。

http://techdog.tumblr.com/post/36496065877/configure-erubis-cgi-in-apache

于 2012-11-26T00:21:43.360 回答