2011-11-25 89 views
4

的配置文件test.conf是如下:为什么Ocsigen无法运行我的python文件?

<ocsigen> 
<server> 
<port>*:8000</port> 

<logdir>/home/zaxis/tmp/log/</logdir> 
<datadir>/home/zaxis/tmp/data</datadir> 
<user>zaxis</user> 
<group>wheel</group> 
<charset>utf-8</charset> 
...... 
<extension findlib-package="ocsigen_ext.cgimod"> 
    <cgitimeout value="30"/> 
</extension> 

<extension findlib-package="ocsigen_ext.staticmod"/> 
...... 
<site path="qachina" charset="utf-8"> 
    <cgi root="cgi-bin" dir="/media/E/www/qachina/cgi-bin"/> 
    <static dir="/media/E/www/qachina" /> 
</site> 
.... 
<commandpipe>/home/zaxis/tmp/ocsigen_command</commandpipe> 
</server> 
</ocsigen> 

然后我跑Ocsigen:

ocsigeocsigen -c test.conf

我可以访问http://127.0.0.1:8000/qachina/index.htm。但是,Ocsigen不会在cgi-bin中执行我的python脚本,但希望浏览器下载它。

顺便说一下,所有的python脚本文件都可以直接在shell中运行。

>head cgi-bin/nav.py 
#!/usr/bin/env python 
# -*- coding: utf-8 -*-enter code here 
... 

我不能访问Ocsigen的邮件列表,所以我在这里发布的建议。

+0

我很困惑。“ocsigen”不是一个以OCaml为中心的系统吗?为什么它能够执行任意的python代码? – Gian

+1

@Gian:CGI是通用网关接口。这是Web服务器运行脚本并以标准方式与它们进行通信的一种方式。它完全独立于语言,因为Web服务器不直接运行代码,而是使用exec在可与之通信的单独进程中运行程序或脚本。 Ocsigen + CGImod不应该运行用Python或任何其他语言编写的脚本。 –

+2

“因为我无法访问ocsigen的邮件列表...”。什么?为什么? – gasche

回答

4

什么是您的Ocsigen版本?

我刚刚尝试过使用ocsigen 1.3.4(目前在Debian测试中的版本),并且您的配置代码段中似​​乎存在一个错误(在Ocsigen方面)。

<cgi regexp="cgi-bin/([^/]*)" dir="/usr/lib/cgi-bin/" script="\1" /> 

我刚刚检查了,我有机会获得Ocsigen的所有正在运行的情况下,他们都用“正则表达式”属性:你想要什么可以实现。虽然文档确实允许您的版本,并且服务器接受它。这两个选择之一是一个错误。

仅供参考,运行ocsigen与-V选项帮助。

+0

'”取得了很大的进步,Firefox并不想让我现在下载python脚本,但是,当运行python脚本时,ocsigen报告“Internal Server Error 500” –

2

我不知道任何可靠的答案,因为它看起来像我应该工作,但我确实有一些可能有用的问题。

当系统提示您下载时,您是否真的下载过它?如果是这样,你是下载由脚本产生的网页还是你自己下载脚本?如果它是前者,那么它只是某种类型的mime类型的问题。如果是后者,听起来更像是服务页面的静态模块而不是CGI的问题。您是否尝试删除<static dir="/media/E/www/qachina" />以查看是否存在冲突?

+0

它正在下载脚本本身。删除“

5

对于网站上的每个请求,Ocsigen会尝试按照配置文件的顺序列出的扩展名。在你的情况下,它会尝试staticmod,这是成功的,因为cgi-bin是存在于给予staticmod的目录中的一个目录。如果您希望先尝试cgimod,则应在<static ...>之前放<cgi ...>

+0

我改变了顺序,但仍然没有工作。 –

1
>cat /usr/ports/www/ocsigen/Makefile |grep -i version 
PORTVERSION= 1.1.0 
>ocsigen -c test.conf -V 
[warnings.log] 2011-11-28 08:25:47 - Exception while creating IPv6 socket: Invalid argument in function bind() 
-- Dependencies of ocsigen_ext.redirectmod: ocsigen_ext.redirectmod 
-- Needed: /usr/local/lib/ocsigen/extensions/redirectmod.cmo 
Loading extension /usr/local/lib/ocsigen/extensions/redirectmod.cmo 
-- Dependencies of ocsigen_ext.cgimod: ocsigen_ext.cgimod 
-- Needed: /usr/local/lib/ocsigen/extensions/cgimod.cmo 
Loading extension /usr/local/lib/ocsigen/extensions/cgimod.cmo 
-- Dependencies of ocsigen_ext.staticmod: ocsigen_ext.staticmod 
-- Needed: /usr/local/lib/ocsigen/extensions/staticmod.cmo 
Loading extension /usr/local/lib/ocsigen/extensions/staticmod.cmo 
-- Dependencies of ocsigen_ext.ocsipersist-sqlite: sqlite3, ocsigen_ext.ocsipersist sqlite 
-- Needed: /usr/local/lib/ocaml/site-lib/sqlite3/sqlite3.cma, /usr/local/lib/ocsigen/ extensions/ocsipersist-sqlite.cma 
Loading extension /usr/local/lib/ocaml/site-lib/sqlite3/sqlite3.cma 
Loading extension /usr/local/lib/ocsigen/extensions/ocsipersist-sqlite.cma 
-- Dependencies of ocsigen_ext.eliom: num.core, num, cryptokit, ocsigen_ext.eliom 
-- Needed: /usr/local/lib/ocaml/nums.cma, /usr/local/lib/ocaml/site-lib/cryptokit cryptokit.cma, /usr/local/lib/ocsigen/extensions/eliom.cma 
Loading extension /usr/local/lib/ocaml/nums.cma 
Loading extension /usr/local/lib/ocaml/site-lib/cryptokit/cryptokit.cma 
Loading extension /usr/local/lib/ocsigen/extensions/eliom.cma 
[warnings.log] 2011-11-28 08:25:47 - While parsing config file, tag <host>: Assuming defaulthostname is "localhost" 
-- Dependencies of eliom_examples.miniwiki: eliom_examples.miniwiki 
-- Needed: /usr/local/lib/ocsigen/examples/miniwiki.cmo 
Loading /usr/local/lib/ocsigen/examples/miniwiki.cmo (will be reloaded every times) 
-- Dependencies of eliom_examples.tutoeliom: eliom_examples.tutoeliom 
-- Needed: /usr/local/lib/ocsigen/examples/tutoeliom.cmo 
Loading /usr/local/lib/ocsigen/examples/tutoeliom.cmo (will be reloaded every times) 
[warnings.log] 2011-11-28 08:25:47 - Reloading config file 
... 
[warnings.log] 2011-11-28 08:25:47 - Config file reloaded 
[warnings.log] 2011-11-28 08:25:47 - Ocsigen has been launched (initialisations ok) 

当使用Opera来访http://localhost:8000/qachina/cgi-bin/nav.py

GET /qachina/cgi-bin/nav.py HTTP/1.1 
User-Agent: Opera/9.80 (X11; FreeBSD 8.2-RELEASE i386; U; zh-cn) Presto/2.9.168 Version/11.50 
Host: localhost:8000 
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1 
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 
Accept-Encoding: gzip, deflate 
Cache-Control: no-cache 
Connection: Keep-Alive 

- host=localhost 
[access.log] 2011-11-28 08:42:06 - connection for localhost from 127.0.0.1 (Opera/9.80 (X11; FreeBSD 8.2-RELEASE i386; U; zh-cn) Presto/2.9.168 Version/11.50): /qachina/cgi-bin/nav.py 
-------- host found! localhost:8000 matches * 
site "ocsigenstuff" does not match url "qachina/cgi-bin/nav.py". 
site "miniwiki" does not match url "qachina/cgi-bin/nav.py". 
-------- site found: url "qachina/cgi-bin/nav.py" matches "qachina". 
--Cgimod: Is it a cgi file? 
--Cgimod: Testing "/media/E/www/qachina/cgi-bin/nav.py". 
--Cgimod: Looking for "/media/E/www/qachina/cgi-bin/nav.py". 
** Receiving HTTP message 
[warnings.log] 2011-11-28 08:42:06 - CGI says: env: python: No such file or directory 
Thread 10 killed on uncaught exception Invalid_argument("index out of bounds") 
[warnings.log] 2011-11-28 08:42:06 - CGI exited with code 127 
~~~ Exception during generation/sending: Ocsigen_http_com.Connection_closed 

[warnings.log] 2011-11-28 8点42分06秒 - EXN页面生成期间:Ocsigen_http_com.Connection_closed(发送500) - >发送500 ...

改变#!/usr/bin/env python#!/usr/local/bin/python每个Python文件后,似乎现在的工作!

谢谢!

+1

版本1.1.0很旧...请考虑使用版本> = 2和/或要求端口升级,但升级到1.3.x版本应该不会太复杂......尽管版本2.x与包装有点不同。 –

相关问题