Почему Ocsigen не может запустить мой файл python?
Файл конфигурации 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:
ocsigeocsigen -c test.conf
Я могу посетить http://127.0.0.1:8000/qachina/index.htm. Однако Ocsigen не выполняет мой скрипт на python в cgi-bin, но хочет, чтобы браузер загрузил его.
Кстати, все файлы скриптов Python могут быть запущены непосредственно в оболочке.
>head cgi-bin/nav.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-enter code here
...
Я не могу посетить список рассылки Ocsigen, поэтому я пишу здесь для предложений.
4 ответа
Какая именно у вас версия Ocsigen?
Я только что попробовал с ocsigen 1.3.4 (версия, которая в настоящее время находится в тестировании Debian), и, кажется, есть ошибка (на стороне Ocsigen) с вашим фрагментом конфигурации. То, что вы хотите, может быть достигнуто с помощью:
<cgi regexp="cgi-bin/([^/]*)" dir="/usr/lib/cgi-bin/" script="\1" />
Я только что проверил все запущенные экземпляры Ocsigen, к которым у меня есть доступ, и все они используют атрибут "regexp". Документация действительно позволяет вашу версию, и сервер принимает ее. Одна из этих двух альтернатив - ошибка.
К вашему сведению, запуск ocsigen с -V
вариант помог.
Для каждого запроса на сайте Ocsigen пробует расширения, перечисленные в порядке файла конфигурации. В вашем случае он пытается использовать staticmod, что успешно, поскольку cgi-bin - это каталог, существующий в каталоге, заданном staticmod. Если вы хотите, чтобы cgimod был опробован первым, вы должны поставить <cgi ...>
до <static ...>
,
Я не знаю четкого ответа, потому что мне кажется, что это должно сработать, но у меня есть некоторые вопросы, которые могут быть полезны.
Когда вам предложат загрузить, вы действительно загрузили его? Если да, загружаете ли вы веб-страницу, которая будет получена из сценария, или загружаете сам сценарий? Если это первое, то это просто проблема типа пантомимы. Если это позднее, то, скорее всего, проблема в статическом модуле, обслуживающем страницу, а не в CGI. Вы пытались удалить <static dir="/media/E/www/qachina" />
чтобы увидеть, если это противоречит?
>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)
При посещении http://localhost:8000/qachina/cgi-bin/nav.py с использованием Opera:
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 08:42:06 - Exn во время генерации страницы: Ocsigen_http_com.Connection_closed (отправка 500) -> Отправка 500 ...
После изменения #!/usr/bin/env python
в #!/usr/local/bin/python
для каждого файла Python, кажется, работает сейчас!
Спасибо!