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 に連絡して、エラーが発生した時刻と、エラーの原因となった可能性のある操作を知らせてください。

このエラーの詳細については、サーバー エラー ログを参照してください。」

エラーログには次のように記載されています。

[Sat Jan 22 17:56:07 2011] [error] [client ::1] (8)Exec format error: exec of 'Dir/cgi-bin/test.rhtml' failed [Sat Jan 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.7Apache/2.2.22があります。erubis 2.7.0実装をインストールし、実行可能な erubis ファイルを Apache の cgi フォルダー (私の場合は /usr/lib/cgi-bin/erubis) にコピーしました。これらのディレクティブを /etc/apache/httpd.conf に追加して、.rhtml ファイルの要求を処理する erubis.sh という名前の CGI スクリプトを構成しました。

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

次のコマンドを実行して、Action モジュールが有効になっていることを確認しました。

$ sudo a2enmod action

Ruby が埋め込まれたページのリクエストを処理するために、この bash シェル スクリプトerubis.shを作成しました。

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

最小限の http ヘッダーを出力してから、埋め込まれた Ruby を含む要求された .rhtml ファイルを処理するよう erubis に要求します。埋め込まれた Ruby ブロックの出力を適切な場所に取得するには、Stdout 拡張オプションが必要であると思われました。

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

于 2012-11-26T00:21:43.360 に答える