Проблема с 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