2010年11月28日 星期日 01:46
有兄弟把django项目部署到apache(mod_python )时,同时使用过ctypes么?
今天我把将一个项目部署到apache下,发现有段间接使用了ctypes的代码造成的子进程segment error。而这个程序, 使用python manage.py runserver运行时一切正常。
apache的error.log显示:
===========
[Sun Nov 28 00:43:09 2010] [notice] Apache/2.2.14 (Ubuntu) DAV/2 SVN/1.6.6 mod_fastcgi/2.4.6 PHP/5.3.2-1ubuntu4.2 with Suhosin-Patch mod_python/3.3.1 Python/2.6.5 mod_ssl/2.2.14 OpenSSL/0.9.8k Phusion_Passenger/2.2.15 configured -- resuming normal operations
[Sun Nov 28 00:43:18 2010]
[notice] child pid 8513 exit signal Segmentation fault (11)
[Sun Nov 28 00:43:21 2010]
[notice] caught SIGTERM, shutting down
===========
这段代码使用的是了pyaspell.py ( http://wm.ite.pl/proj/aspell-python/ ), 而它使用了ctypes. 我将其中出错的代码copy出来,单独放在django的views.py中,一样会出错, 出错代码是 :
def index(request):
libname = ctypes.util.find_library('aspell')
lib = ctypes.CDLL(libname)
config = lib.new_aspell_config()
if config == None:
raise Exception("Can't create aspell config object")
lib.new_aspell_speller(config)
===============
另外,apache的配置也算中规中矩吧,除上面那段外,其它功能都正常。配置信息如下:
<VirtualHost *:80>
ServerName my.site.com
DocumentRoot /var/www
<Directory "/var/www">
Options Indexes FollowSymLinks ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
RailsBaseURI /testrails
<Location "/mydjango">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE settings
PythonOption django.root /mydjango
PythonDebug On
PythonAutoReload On
PythonPath "['/var/www/mydjango/'] + sys.path"
</Location>
<Location "/mydjango_media">
SetHandler None
</Location>
<LocationMatch "\.(jpg|gif|png)$">
SetHandler None
</LocationMatch>
</VirtualHost>
======================
我对python不熟悉,考虑有没有可能有几个原因:
1. 安全设置有错?
2. 多进程下对c动态库调用,会照成内存溢出? 有看到这方面讨论(google " mod_python c extensions lea k")。 如果是这个这个原因,大家建议在apache下使用什么来加载django应用呢?
另外,这种情况,apache的err.log就两条出错信息,怎么才能获得更多的错误信息呢?
2010年11月28日 星期日 02:47
尝试配置mod_wsgi,也是同样的问题(还是ctypes相关的那几句有错),
[Sun Nov 28 02:44:00 2010] [notice] Apache/2.2.14 (Ubuntu) DAV/2 SVN/1.6.6 mod_fastcgi/2.4.6 PHP/5.3.2-1ubuntu4.2 with Suhosin-Patch mod_python/3.3.1 Python/2.6.5 mod_ssl/2.2.14 OpenSSL/0.9.8k mod_wsgi/2.8 configured -- resuming normal operations
目前的设置:
================
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so
====
=====
PySIRE.wsgi:
import os
[Sun Nov 28 02:44:23 2010] [notice]
child pid 10894 exit signal Segmentation fault (11)
[Sun Nov 28 02:44:24 2010] [notice] child pid 10895 exit signal Segmentation fault (11)
ServerName my.site.com
DocumentRoot /var/www
AllowOverride All
Order allow,deny
Allow from all
SetHandler None
SetHandler None
WSGIScriptAlias /PySIRE "/home/my/mydjangoproject/PySIRE.wsgi"
import sys
import django.core.handlers.wsgi
sys.path.append(r'/home/my/mydjangoproject/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
application = django.core.handlers.wsgi.WSGIHandler()
2010年11月28日 星期日 03:16
补充
$ apache2 -l
Compiled in modules:
core.c
mod_log_config.c
mod_logio.c
prefork.c
http_core.c
mod_so.c
2010年11月28日 星期日 08:49
没有用过,考虑用valgrind找找原因
2010年11月29日 星期一 13:31
这么说ctypes在做web时不常用?有别的替代方式么?
Zeuux © 2024
京ICP备05028076号