我正在尝试运行一个Rebol CGI脚本,在一个运行在GNU/Linux Debian稳定机器上的apache2服务器上。
这是我的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/htmlnn";
print "coucou! (signé: Perle)";
现在,我想知道Rebol脚本出了什么问题…
我检查了几件事:
Rebol可执行文件的路径是正确的:我可以在不显式调用解释器的情况下直接从shell启动脚本:
# 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-Jan-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的配置一点也不熟悉。
任何想法?
您尝试过使用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)
=>成功了!
我不想让core作为我默认的Rebol解释器,这就是为什么我更喜欢让它显式命名为rebol_core。这样/usr/bin/rebol仍然是rebol/view解释器。
非常感谢,Ingo!