Django开发者群  - 讨论区

标题:ctypes 在 mod_python 下会造成 Segmentation fault?

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
[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)

 

目前的设置:

================

LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so 

==== 

    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"

=====

PySIRE.wsgi:

import os 
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哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号