2011-11-25 69 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與包裝有點不同。 –

相關問題