2011-01-23 54 views
3

我想在rhtml中運行嵌入式ruby。rhtml(eruby)apache麻煩

$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」給出了以下錯誤:

「內部服務器錯誤

服務器遇到一個內部錯誤或配置錯誤,無法完成您的請求。

請與服務器管理員聯繫,[email protected],並通知他們錯誤發生的時間,以及任何你可能已經做了可能造成的錯誤。

詳細瞭解科技信息他的錯誤可能在服務器錯誤日誌中可用。「

錯誤日誌說:

[星期六年1月22 17點56分07秒2011] [錯誤] [客戶端:: 1](8)Exec的格式錯誤:「DIR /的cgi-bin /測試的EXEC鍵。 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 

任何想法?謝謝!

回答

1

你可能需要添加,在最低限度,

Content-type: text/html 

<html> 
.... 

你eRuby的文件的頂部 - CGI腳本負責內容之前頭髮送回客戶端。可能有更多的頭文件有意回傳,但這可能足以開始。

+0

謝謝!我添加了「Content-type」字段,但它仍然不起作用。 $貓test.rhtml 內容類型:文本/ HTML 測試<%富= 「紅寶石」;打印「#{foo}!」 %> 在錯誤日誌中獲取相同的錯誤。謝謝! – user414585 2011-01-23 02:50:21

0

的Apache/2.2.22的Ubuntu 12.04 & 的Ruby 1.8.7。我安裝了erubis 2.7.0實現&將可執行文件erubis文件複製到Apache的cgi文件夾,在我的情況下複製到/ usr/lib/cgi-bin/erubis。我加入這些指令配置稱爲erubis.sh來處理的.rhtml文件的請求CGI腳本來/etc/apache/httpd.conf:

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

我確信,操作模塊運行以下命令啓用:

$ 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