2010-08-17 2 views
6

나는 최근에 CGI 스크립트가 stdout으로 인쇄 할 수있는 거의 모든 언어로 작성 될 수 있음을 발견했다. 내 공유 호스트에 설치 내 로컬 아파치에서 작동 작은 교활의 CGI 스크립트를 작성,하지만했습니다Guile Scheme 및 CGI?

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

이것은 출력, I 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를 구현을 사용, 공유 호스트에서 오전 때문에 질문 벗어 . 그렇다면 여기에 어떤 문제가있을 수 있습니까? Python, Perl, Ruby 및 Sh로 작성한 비슷한 CGI 스크립트가 오류없이 서버에서 작동합니다. guile 1.8.7이 호스트에 설치되어 있지만 로컬 컴퓨터가 최신 버전으로 설치되어 있습니다.

나는 이것이 엄청난 틈새 문제라는 것을 알고 있으며, 어떤 도움을 주시면 감사하겠습니다!

답변

6

자신의 유인물 등을 컴파일하여 ~/bin/디렉토리에 저장하고 스크립트가 가리 키도록 할 수도 있습니다.

+0

우수 아이디어, 감사합니다! – jcw

+0

최근에이 방법을 사용하여 CGI 프로그램을 실행하기 위해 내 호스트에서 위폐를 제거했습니다. guile이 설치된 곳에서 LD_LIBRARY_PATH와 GUILE_LOAD_PATH를 올바르게 설정하기 위해 작은 쉘 스크립트 (CGI 프로그램이 실행 됨)를 만들었습니다. – gcbenison

4

나는 웹 서버 프로세스가 /usr/local/bin/guile 인터프리터에 액세스하지 못한다고 생각합니다. 해당 파일에 대한 사용 권한을 확인하고, 서버가 chroot 또는 필수 액세스 제어 등에서 실행되는 경우 액세스 할 수 있는지 확인하십시오. 그리고 스크립트 사용 권한을 다시 확인하십시오.

+0

첫 번째 행을 "#!/usr/bin/env guile"로 변경했으며 동일한 오류가 발생했습니다. guile 바이너리는 o + w를 제외하고 그 옆에 앉아있는 파이썬과 루비 바이너리와 같은 권한을 가지고 있습니다 (그리고 그 그룹은 wheel이 아니라 bin입니다). chroot 권한이 없습니다. 스크립트의 사용 권한은 755입니다. – jcw

1

서버에서 ssh 접속 될 때 존재하는/usr/local/bin 디렉토리는 스크립트가 브라우저를 통해 제공되고 액세스 될 때/usr/local/bin과 다릅니다. 내가 통역이 CGI 스크립트를 통해 사용할 수 있었던 것을 발견 :

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

내가 브라우저를 통해이 스크립트를 실행했을 때, 나는 mzscheme 나열하지만, ​​교활되지 않았 음을 발견했다. 문제가 해결되었으므로 mzscheme을 사용하고 있습니다.

감사합니다. Karl.