Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 4, 2012 20:27:45

FILLIPO
От:
Зарегистрирован: 2009-05-03
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Apache/2.2.20 (Ubuntu) + Python 2.7.2 + FastCGI

Здравствуйте. Хотелось бы помощи: питоновский FastCGI скрипт пишет в error.log вместо того, чтобы отвечать клиенту.

Код скрипта

#!/usr/bin/python

print "Content-Type=\"text/html; charset=utf-8\""
print "<html><body>Hello, FastCGIWORLD!</body></html>"
Фрагмент error.log
[Wed Jan 04 23:08:29 2012] [error] [client 127.0.0.1] FastCGI: comm with (dynamic) server "/var/www/fcgi-bin/HelloFastCGIWorld.py" aborted: (first read) idle timeout (30 sec)
[Wed Jan 04 23:08:29 2012] [error] [client 127.0.0.1] FastCGI: incomplete headers (0 bytes) received from server "/var/www/fcgi-bin/HelloFastCGIWorld.py"
[Wed Jan 04 23:08:33 2012] [warn] FastCGI: (dynamic) server "/var/www/fcgi-bin/HelloFastCGIWorld.py" restarted (pid 6750)
Content-Type="text/html; charset=utf-8"
<html><body>Hello, FastCGIWORLD!</body></html>
причем примечательно, что даже когда к скрипту не обращаются, он исправно каждые 5 секунд пишет в error.log, убивается и воскресает.
[Wed Jan 04 23:08:08 2012] [warn] FastCGI: (dynamic) server "/var/www/fcgi-bin/HelloFastCGIWorld.py" (pid 6731) terminated by calling exit with status '0'
[Wed Jan 04 23:08:13 2012] [warn] FastCGI: (dynamic) server "/var/www/fcgi-bin/HelloFastCGIWorld.py" restarted (pid 6732)
Content-Type="text/html; charset=utf-8"
<html><body>Hello, FastCGIWORLD!</body></html>
[Wed Jan 04 23:08:13 2012] [warn] FastCGI: (dynamic) server "/var/www/fcgi-bin/HelloFastCGIWorld.py" (pid 6732) terminated by calling exit with status '0'
[Wed Jan 04 23:08:18 2012] [warn] FastCGI: (dynamic) server "/var/www/fcgi-bin/HelloFastCGIWorld.py" restarted (pid 6733)
Content-Type="text/html; charset=utf-8"
<html><body>Hello, FastCGIWORLD!</body></html>
[Wed Jan 04 23:08:18 2012] [warn] FastCGI: (dynamic) server "/var/www/fcgi-bin/HelloFastCGIWorld.py" (pid 6733) terminated by calling exit with status '0'
[Wed Jan 04 23:08:23 2012] [warn] FastCGI: (dynamic) server "/var/www/fcgi-bin/HelloFastCGIWorld.py" restarted (pid 6747)
Content-Type="text/html; charset=utf-8"
<html><body>Hello, FastCGIWORLD!</body></html>
[Wed Jan 04 23:08:23 2012] [warn] FastCGI: (dynamic) server "/var/www/fcgi-bin/HelloFastCGIWorld.py" (pid 6747) terminated by calling exit with status '0'
[Wed Jan 04 23:08:28 2012] [warn] FastCGI: (dynamic) server "/var/www/fcgi-bin/HelloFastCGIWorld.py" restarted (pid 6748)
Content-Type="text/html; charset=utf-8"
<html><body>Hello, FastCGIWORLD!</body></html>
google дал ответ, который я не понимаю
mod_fastcgi logs FastCGI application error (stderr) output to the server log associated with the request. Errors reported by the FastCGI process manager, fcgi-pm, are reported to the main server log (typically, logs/error_log). Data written to stdout or stderr before entering the FastCGI accept loop or via a mechanism that is not FastCGI protocol aware will also be directed to the main server log. If Apache's LogLevel is set to info additional informational messages are printed to the logs, these messages may be especially helpful while debugging a configuration.
что такое FastCGI accept loop? как выглядит питоновский FastCGI-совместимый скрипт?
и да, wsgi не предлагайте пожалуйста, ведь, как я это понимаю: wsgi - только питоновская штука, а FastCGI - целый протокол, по которому сервер умеет общаться с программами на разных языках.



Офлайн

#2 Янв. 4, 2012 22:08:54

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Apache/2.2.20 (Ubuntu) + Python 2.7.2 + FastCGI

FILLIPO
и да, wsgi не предлагайте пожалуйста, ведь, как я это понимаю: wsgi - только питоновская штука, а FastCGI - целый протокол, по которому сервер умеет общаться с программами на разных языках.
Предложение не имеет смысла т.к. wsgi - протокол между питоном и сервером, а “FastCGI - целый протокол, по которому сервер умеет общаться с программами на разных языках”, вы же не из питона будете общаться с программами на разных языках через fcgi.

Возможно вы хотели сказать, что wsgi понимают не все веб-вервера, но опять же это необоснованные страхи, т.к. в этом случае можно использовать apache как прослойку от питона к “боевому” серверу.
Ещё можете глянуть uwsgi.

Офлайн

#3 Янв. 5, 2012 06:23:29

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9849
Репутация: +  853  -
Профиль   Отправить e-mail  

Apache/2.2.20 (Ubuntu) + Python 2.7.2 + FastCGI

там, вроде, нужно print вставить

#!/usr/bin/env python

print "Content-Type=\"text/html; charset=utf-8\""
print
print "<html><body>Hello, FastCGIWORLD!</body></html>"



Офлайн

#4 Янв. 5, 2012 08:14:32

FILLIPO
От:
Зарегистрирован: 2009-05-03
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Apache/2.2.20 (Ubuntu) + Python 2.7.2 + FastCGI

py.user.next
там, вроде, нужно print вставить
вставил один, вставил второй (кажется, header'ы от body отделяются двумя пробелами?), поменял shebang на ваш - по-прежнему печатается в error.log

o7412369815963
я имел в виду, что один раз прочитав, настроив и поняв FastCGI, потом можно пользоваться любым языком для написания скриптов, а не только питоном, но про wsgi и uwsgi почитаю еще (меня остановило именно то, что эти два протокола только для связи сервер - питон - сервер, а не сервер - любой язык - сервер). Теперь сначала хочу заставить заработать python через FastCGI хотя бы потому, что уже потратил достаточное время на “раскопки”. Поэтому, если кому по-прежнему интересно, еще пара фактов:
в mods-enabled вижу среди прочего: cgid.conf cgid.load fastcgi.conf fastcgi.load (в свою очередь в apache2.conf есть строчки, которые подключают все .conf файлы из mods-enabled), содержимое
cgid.conf
# Socket for cgid communication
ScriptSock ${APACHE_RUN_DIR}/cgisock
fastcgi.conf
<IfModule mod_fastcgi.c>
#AddHandler fastcgi-script .fcgi
AddHandler fastcgi-script .py py .fcgi fcgi
#FastCgiWrapper /usr/lib/apache2/suexec
FastCgiIpcDir /var/lib/apache2/fastcgi
</IfModule>

<Directory /var/www/fcgi-bin>
Options +ExecCGI
</Directory>
права на fcgi-bin
all3fox@faeton:/var/www$ stat fcgi-bin
File: «fcgi-bin»
Size: 4096 Blocks: 8 IO Block: 4096 каталог
Device: 801h/2049d Inode: 394341 Links: 3
Access: (0777/drwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2012-01-05 10:22:44.338159882 +0400
Modify: 2012-01-05 10:24:13.726603141 +0400
Change: 2012-01-05 10:24:13.726603141 +0400
all3fox@faeton:/var/www$ stat fcgi-bin/HelloFastCGIWorld.py
File: «fcgi-bin/HelloFastCGIWorld.py»
Size: 140 Blocks: 8 IO Block: 4096 обычный файл
Device: 801h/2049d Inode: 394212 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2012-01-05 10:24:16.390616353 +0400
Modify: 2012-01-05 10:24:13.674602880 +0400
Change: 2012-01-05 10:24:13.726603141 +0400
проблема остается прежней: питоновский fast-cgi скрипт пишет в error.log вместо того, чтобы отвечать клиенту

UPD
тем временем был проштудирован питоновский мануал, код скрипта изменен на православно простой
#!/usr/bin/python

print "Content-Type: text/html"
print
print "Hello, world!"
ошибка осталось, из чего напрашивается вывод: дело не в питоне, мне нужна помощь по апачу и его fast-cgi модулю? Попробовал поискать нормальный форум - не нашел, на irc канал #httpd попасть не смог.



Отредактировано (Янв. 5, 2012 10:54:05)

Офлайн

#5 Янв. 5, 2012 11:51:32

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Apache/2.2.20 (Ubuntu) + Python 2.7.2 + FastCGI

> уже потратил достаточное время на “раскопки”.

и ещё потратите, “все” уже давно на wsgi =), разворачивается за 5 мин на норм дистрибе. http://www.py-my.ru/post/4bfb3c691d41c846bc00000f

> только для связи сервер - питон - сервер, а не сервер - любой язык - сервер
похоже что оно “никому” не нужно - для “каждого” языка свой протокол:
php - mod_php - apache
ruby - mod_ruby apache
python - mod_wsgi - apache

Офлайн

#6 Янв. 5, 2012 14:13:32

FILLIPO
От:
Зарегистрирован: 2009-05-03
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Apache/2.2.20 (Ubuntu) + Python 2.7.2 + FastCGI

o7412369815963
“все” уже давно на wsgi
понял, уже бегу :), за ссылку спасибо.



Офлайн

#7 Янв. 5, 2012 20:33:28

FILLIPO
От:
Зарегистрирован: 2009-05-03
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Apache/2.2.20 (Ubuntu) + Python 2.7.2 + FastCGI

Не удержусь и напишу о текущем положении дел: поставил wsgi, почитал, дописал в wsgi.conf WSGIScriptAlias - работает. Дописал в fastcgi.conf ScriptAlias - заработало. Ну почему тогда <Directory путь_к_скриптам>Options +ExecCGI</Directory> не работает для FastCGI? Ведь факт, что отрабатывает со ScriptAlias подтвердил, что fastCGI я настроил правильно. Все, больше не ною и работаю с wsgi.



Офлайн

#8 Янв. 5, 2012 22:12:40

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Apache/2.2.20 (Ubuntu) + Python 2.7.2 + FastCGI

У вас обычное CGI приложение, а FastCGI - это протокол.
То есть вам нужно создать сокет (TCP или Unix) и слушать его.

Вот тут подробнее:
http://fastcgi.com/devkit/doc/fcgi-spec.html
http://www.nongnu.org/fastcgi/#AEN147

Офлайн

#9 Янв. 6, 2012 09:07:45

FILLIPO
От:
Зарегистрирован: 2009-05-03
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Apache/2.2.20 (Ubuntu) + Python 2.7.2 + FastCGI

s0rg
Спасибо, этого еще не читал. Но мне казалось, что общение с socket берет на себя apache, отсюда и строки из файлов его настройки:
из cgid.conf

# Socket for cgid communication
ScriptSock ${APACHE_RUN_DIR}/cgisock
из fastcgi.conf
FastCgiIpcDir /var/lib/apache2/fastcgi
то есть я думал, что stdout скрипта apache сам перенаправляет в socket. В любом случае сейчас пойду читать ссылки и гуглить. Спасибо.



Офлайн

#10 Янв. 6, 2012 11:05:53

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Apache/2.2.20 (Ubuntu) + Python 2.7.2 + FastCGI

Неа - этим вы указываете какой именно сокет вы слушаете - но создавать / слушать - полностью ваша задача.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version