Проблема с Rhtml (Eruby) Apache

Я пытаюсь запустить встроенный рубин внутри rhtml.

$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 и сообщите им о времени возникновения ошибки и обо всех действиях, которые вы могли совершить, что могло привести к ошибке.

Дополнительная информация об этой ошибке может быть доступна в журнале ошибок сервера."

Журнал ошибок говорит:

[Суббота, 22 января 17:56:07 2011] [ошибка] [клиент::1] (8) Ошибка формата exec: не удалось выполнить файл "Dir/cgi-bin/test.rhtml" [суббота, 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

Есть идеи? Спасибо!

2 ответа

Вы, вероятно, должны добавить, как минимум,

Content-type: text/html

<html>
....

в верхней части вашего файла eruby - CGI-скрипты отвечают за отправку заголовков клиенту перед контентом. Может быть больше заголовков, которые имеют смысл отправлять обратно, но этого может быть достаточно для начала.

У меня есть Apache/2.2.22 на Ubuntu 12.04 и Ruby 1.8.7. Я установил реализацию erubis 2.7.0 и скопировал исполняемый файл erubis в папку Apache cgi, в моем случае - в / usr / lib / cgi-bin / erubis. Я настроил скрипт cgi с именем erubis.sh для обработки запросов на файлы.rhtml, добавив следующие директивы в /etc/apache/httpd.conf:

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

Я убедился, что модуль Action включен, выполнив эту команду:

$ sudo a2enmod action

Я создал этот скрипт оболочки bash erubis.sh для обработки запросов на страницы со встроенным ruby:

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

Он выводит минимальный заголовок http, а затем просит erubis обработать запрошенный файл.rhtml, содержащий встроенный Ruby. Опция улучшения Stdout казалась необходимой для получения вывода встроенных блоков Ruby в нужных местах.

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

Другие вопросы по тегам