Ocaml 为什么可以';Ocsigen运行我的python文件吗?

Ocaml 为什么可以';Ocsigen运行我的python文件吗?,ocaml,ocsigen,Ocaml,Ocsigen,配置文件test.conf如下所示: <ocsigen> <server> <port>*:8000</port> <logdir>/home/zaxis/tmp/log/</logdir> <datadir>/home/zaxis/tmp/data</datadir> <user>zaxis</user> <group>wheel</group> &

配置文件test.conf如下所示:

<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的邮件列表,因此我在这里发布建议。

我不知道任何可靠的答案,因为在我看来它应该会起作用,但我确实有一些问题可能会有所帮助


当你被提示下载时,你真的下载了吗?如果是,您是下载脚本生成的网页,还是下载脚本本身?如果是前者,那么这只是某种mime类型的问题。如果是后者,听起来更可能是服务于页面的静态模块的问题,而不是CGI模块的问题。您是否已尝试删除
以查看是否存在冲突?

对于站点上的每个请求,Ocsigen都会尝试按照配置文件的顺序列出扩展名。在您的例子中,它尝试staticmod,这是成功的,因为cgi bin是给定给staticmod的目录中存在的一个目录。如果你想先试用cgimod,你应该把
放在

你的Ocsigen版本到底是什么

我刚刚尝试过ocsigen 1.3.4(目前正在进行Debian测试的版本),您的配置代码片段似乎有一个bug(在ocsigen端)。您想要的可以通过以下方式实现:

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

我刚刚检查了我有权访问的所有正在运行的Ocsigen实例,它们都使用“regexp”属性。不过,文档允许您的版本,服务器也接受它。这两个备选方案中有一个是bug

仅供参考,使用
-V
选项运行ocsigen会有所帮助

>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)
[warnings.log]2011-11-28 08:42:06-页面生成期间的Exn:Ocsigen_http_com.Connection_关闭(发送500) ->发送500

更改
#后/usr/bin/env python
#/usr/local/bin/python
对于每个python文件,它现在似乎都可以工作了


谢谢

我很困惑。难道ocsigen不是一个以OCaml为中心的系统吗?为什么它能够执行任意python代码?@Gian:CGI是公共网关接口。这是web服务器以标准方式运行脚本并与之通信的一种方式。它完全独立于语言,因为web服务器不是直接运行代码,而是使用exec在一个单独的进程中运行程序或脚本,它可以与之通信。Ocsigen+CGImod没有理由不运行用Python或任何其他语言编写的脚本。“因为我无法访问Ocsigen的邮件列表…”。什么?为什么?是
在中国,我不能访问:(它正在下载脚本本身。删除“
会有很大的进步。Firefox不希望我现在下载python脚本。但是,ocsigen报告“内部服务器错误500”“运行Python脚本时,版本1.1.0很老…请考虑使用版本>=2和/或要求端口升级。升级到1.3。X...版本2不太复杂。不过,X是有点不同的W.R.T封装。
>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)
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