Как выполнить скрипт Rebol CGI на apache2
Я пытаюсь запустить скрипт Rebol CGI на сервере apache2, работающем на стабильной машине Debian GNU/Linux.
Вот мой сценарий Rebol:
# pierre@autan: ~$ < 2013_05_29__17_35_22 >
dog /usr/lib/cgi-bin/test.cgi
#!/usr/bin/rebol -cs
REBOL []
print "Content-type: text/html^/"
print "coucou! (signé: Rebol)"
который терпит неудачу:
# pierre@autan: ~$ < 2013_05_29__17_21_18 >
lynx http://127.0.0.1/cgi-bin/test.cgi
возвращает:
500 Internal Server Error
Internal Server Error
The server encountered an internal error or misconfiguration and was
unable to complete your request.
Please contact the server administrator, webmaster@localhost and inform
them of the time the error occurred, and anything you might have done
that may have caused the error.
More information about this error may be available in the server error
log.
__________________________________________________________________
Apache/2.2.22 (Debian) Server at 127.0.0.1 Port 80
Журнал говорит:
###ROOT### < 29/05/2013 17:02:45 > root@autan:/#
tail -1 /var/log/apache2/error.log
[Thu May 30 15:04:23 2013] [error] [client 127.0.0.1] Premature end of script headers: test.cgi
После прочтения документа ( http://httpd.apache.org/docs/trunk/fr/howto/cgi.html) я могу успешно запустить этот Perl-скрипт:
# pierre@autan: ~$ < 2013_05_29__17_35_22 >
dog /usr/lib/cgi-bin/testpl.cgi
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "coucou! (signé: Perle)";
Теперь мне интересно, что не так с сценарием Rebol...
Я проверил несколько вещей:
Путь к исполняемому файлу Rebol правильный: я могу запустить скрипт без явного вызова интерпретатора прямо из оболочки:
# pierre@autan: ~$ < 2013_05_30__14_07_36 >
/usr/lib/cgi-bin/test.cgi
Content-type: text/html
coucou! (signé: Rebol)
Права на исполнение кажутся мне хорошими; они одинаковы для обоих файлов:
# pierre@autan: ~$ < 2013_05_29__17_35_22 >
ll /usr/lib/cgi-bin/test*.cgi
-rwxr-xr-x 1 root root 97 mai 29 09:28 /usr/lib/cgi-bin/test.cgi
-rwxr-xr-x 1 root root 87 mai 29 09:26 /usr/lib/cgi-bin/testpl.cgi
Права на исполнение исполняемого файла Rebol кажутся мне подходящими:
# pierre@autan: ~$ < 2013_05_30__14_07_36 >
ll /usr/bin/rebol
-rwxr-xr-x 1 root root 1215652 déc. 30 22:50 /usr/bin/rebol
Я использую REBOL/View 2.7.8.4.2 2 января 2011 года.
Вот файл конфигурации apache2, который я изменил:
###ROOT### < 29/05/2013 17:20:12 > root@autan:/etc/apache2/conf.d#
dog /etc/apache2/conf.d/httpd.conf
#ScriptAlias magic/cgi-bin/ /var/www/magic/cgi-bin/
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
AddHandler cgi-script .cgi
Options
AddHandler magic .rhtml
Action magic /cgi-bin/magic.cgi
<Directory "/var/www/magic/cgi-bin/">
AllowOverride None
Options ExecCGI MultiViews SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
<Directory "/usr/lib/cgi-bin/">
AllowOverride None
Options ExecCGI MultiViews SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
Обратите внимание, что я совсем не знаком с конфигурацией apache.
Любая идея?
2 ответа
Вы пытались использовать версию Rebol/Core?
Rebol/View необходим доступ к графической системе, даже если он только печатает текст, и, возможно, это невозможно при запуске через Apache.
(Вы получите ошибку, если вы запустите Rebol/View на текстовой консоли, например)
С уважением,
Инго
Я думаю, что я мог бы также положить решение здесь, для полноты картины. Я просто последовал совету Инго. Вот тупая копия моего терминала, показывающая все шаги:
# pierre@autan: ~$ < 2013_05_30__19_52_58 >
cd rebol/telech/
# pierre@autan: ~/rebol/telech$ < 2013_05_30__19_52_58 >
wget http://www.rebol.com/downloads/v278/rebol-core-278-4-2.tar.gz
--2013-05-30 19:53:27-- http://www.rebol.com/downloads/v278/rebol-core-278-4-2.tar.gz
Résolution de www.rebol.com (www.rebol.com)... 205.134.252.23
Connexion vers www.rebol.com (www.rebol.com)|205.134.252.23|:80...connecté.
requête HTTP transmise, en attente de la réponse...200 OK
Longueur: 224394 (219K) [application/x-gzip]
Sauvegarde en : «rebol-core-278-4-2.tar.gz»
100%[============================================================================================================================================>] 224,394 127K/s ds 1.7s
2013-05-30 19:53:29 (127 KB/s) - «rebol-core-278-4-2.tar.gz» sauvegardé [224394/224394]
# pierre@autan: ~/rebol/telech$ < 2013_05_30__19_52_58 >
tar zxf rebol-core-278-4-2.tar.gz
# pierre@autan: ~/rebol/telech$ < 2013_05_30__19_52_58 >
su
Mot de passe :
###ROOT### < 30/05/2013 19:55:06 > root@autan:/home/pierre/rebol/telech#
cp releases/rebol-core/rebol /usr/bin/rebol_core
###ROOT### < 30/05/2013 19:55:06 > root@autan:/home/pierre/rebol/telech#
chmod a+x /usr/bin/rebol_core
###ROOT### < 30/05/2013 19:55:06 > root@autan:/home/pierre/rebol/telech#
vi /usr/lib/cgi-bin/test.cgi
###ROOT### < 30/05/2013 19:55:06 > root@autan:/home/pierre/rebol/telech#
dog /usr/lib/cgi-bin/test.cgi
#!/usr/bin/rebol_core -cs
REBOL []
print "Content-type: text/html^/^/"
print "coucou! (signé: Rebol)"
###ROOT### < 30/05/2013 19:55:06 > root@autan:/home/pierre/rebol/telech#
# pierre@autan: ~/rebol/telech$ < 2013_05_30__19_52_58 >
lynx http://127.0.0.1/cgi-bin/test.cgi
coucou! (signé: Rebol)
=> это сработало!
Я не хочу, чтобы ядро использовалось в качестве интерпретатора Rebol по умолчанию, поэтому я предпочитаю иметь его в явном виде с именем rebol_core. Так что /usr/bin/rebol остается интерпретатором rebol/view.
Большое спасибо, Инго!