Как выполнить скрипт 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.

Большое спасибо, Инго!

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