Guile Scheme и CGI? - PullRequest
       58

Guile Scheme и CGI?

6 голосов
/ 17 августа 2010

Я недавно обнаружил, что CGI-скрипты могут быть написаны практически на любом языке, который может печатать на стандартный вывод.Я написал небольшой скрипт guile cgi, который работает на моей локальной установке apache, но не на моем общем хосте:

#!/usr/local/bin/guile -s 
!#
(display "Content-Type: text/html")
(newline)
(newline)
(display "hi")
(newline)

Это вывод, когда я запускаю скрипт из оболочки на моем хосте поверхssh:

$ ./scheme.cgi
Content-Type: text/html

hi

Итак, очевидно, что на моем хосте установлен guile.Однако, когда я пытаюсь получить доступ к этому файлу в браузере, я получаю «500 Internal Server Error».Просматривая мои журналы ошибок, я вижу, что получаю страшную ошибку «преждевременный конец заголовков скриптов»:

[server.com] [Tue Aug 17 00:54:19 2010] [error] [client xx.xx.xx.xxx] (2)No such file or directory:
exec of '/home/www/vhosts/jcw.geekisp.com/cgi-bin/scheme.cgi' failed

[server.com] [Tue Aug 17 00:54:19 2010] [error] [client xx.xx.xx.xxx] Premature end 
of script headers: scheme.cgi

Поскольку я на общем хосте, использование mod_lisp или реализации fastcgi из guile невопрос.При этом, что может быть проблема здесь?Подобные сценарии cgi, которые я написал на python, perl, ruby ​​и sh, работают на сервере без ошибок.Я вижу, что на хосте установлена ​​guile 1.8.7, но моя локальная машина установлена ​​на новейшую версию.

Я понимаю, что это невероятно нишевый вопрос, любая помощь будет признательна!

Ответы [ 3 ]

6 голосов
/ 22 августа 2010

Вы также можете скомпилировать свою собственную копию файла guile или чего-то еще, сохранить ее в каталоге ~ / bin / и указать там сценарии.

4 голосов
/ 17 августа 2010

Я считаю, что ошибка означает, что у вашего веб-сервера нет доступа к интерпретатору /usr/local/bin/guile. Проверьте разрешения для этого файла, убедитесь, что он доступен, если сервер работает в режиме chroot или с обязательным контролем доступа и т. Д. И еще раз проверьте разрешения вашего сценария, пока он у вас.

1 голос
/ 19 августа 2010

Оказывается, что каталог / usr / local / bin, который существует, когда я ssh'ed на сервере, отличается от / usr / local / bin, когда скрипт обрабатывается и доступен через браузер. Я узнал, какие переводчики были доступны через этот CGI-скрипт:

#!/bin/sh
echo "Content type: text/html\r\n\r\n"
echo "ls /usr/local/bin"

Когда я запустил этот скрипт через браузер, я обнаружил, что в списке есть mzscheme, но не guile. Итак, проблема решена, я использую mzscheme.

Спасибо, Карл.

...