4

だから私はapache2.22を介してmod_wsgiの私のdjangowsgiアプリケーションでsegfaultsを取得しています

これがwsgiアプリです:

import os
import sys

sys.path.append('/home/***.com/zpencerq')
sys.path.append('/home/***.com/zpencerq/part')

os.environ['DJANGO_SETTINGS_MODULE'] = 'part.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

ログからのエラーは次のとおりです。

[Mon Jun 18 18:13:39 2012] [info] mod_wsgi (pid=78535): Create interpreter 'www.***.com|'.
[Mon Jun 18 18:13:39 2012] [info] [client 128.227.57.184] mod_wsgi (pid=78535, process='***', application='www.***.com|'): Loading WSGI script '/usr/home/***.com/zpencerq/part/apache/django.wsgi'.
[Mon Jun 18 18:13:39 2012] [error] [client 128.227.57.184] Premature end of script headers: django.wsgi
[Mon Jun 18 18:13:40 2012] [notice] child pid 78535 exit signal Segmentation fault (11)

mod_wsgiのライブラリリファレンスは次のとおりです。

root@seese# ldd /usr/local/apache/modules/mod_wsgi.so
/usr/local/apache/modules/mod_wsgi.so:
        libpython2.7.so.1 => /usr/local/lib/libpython2.7.so.1 (0x28300000)
        libutil.so.7 => /lib/libutil.so.7 (0x2819f000)
        libm.so.5 => /lib/libm.so.5 (0x281ac000)
        libc.so.7 => /lib/libc.so.7 (0x28080000)
        libthr.so.3 => /lib/libthr.so.3 (0x281c1000)

ロードされたモジュールは次のとおりです。

Loaded Modules:
 core_module (static)
 authn_file_module (static)
 authn_default_module (static)
 authz_host_module (static)
 authz_groupfile_module (static)
 authz_user_module (static)
 authz_default_module (static)
 auth_basic_module (static)
 include_module (static)
 filter_module (static)
 deflate_module (static)
 log_config_module (static)
 env_module (static)
 setenvif_module (static)
 version_module (static)
 mpm_prefork_module (static)
 http_module (static)
 mime_module (static)
 status_module (static)
 autoindex_module (static)
 asis_module (static)
 suexec_module (static)
 cgi_module (static)
 negotiation_module (static)
 dir_module (static)
 actions_module (static)
 userdir_module (static)
 alias_module (static)
 so_module (static)
 php5_module (shared)
 wsgi_module (shared)
Syntax OK

これがモジュールでコンパイルされたものです:

root@seese# httpd -l
Compiled in modules:
  core.c
  mod_authn_file.c
  mod_authn_default.c
  mod_authz_host.c
  mod_authz_groupfile.c
  mod_authz_user.c
  mod_authz_default.c
  mod_auth_basic.c
  mod_include.c
  mod_filter.c
  mod_deflate.c
  mod_log_config.c
  mod_env.c
  mod_setenvif.c
  mod_version.c
  prefork.c
  http_core.c
  mod_mime.c
  mod_status.c
  mod_autoindex.c
  mod_asis.c
  mod_suexec.c
  mod_cgi.c
  mod_negotiation.c
  mod_dir.c
  mod_actions.c
  mod_userdir.c
  mod_alias.c
  mod_so.c

ここにいくつかのPythonグッズがあります:

root@seese# ls -l /usr/local/bin/python*
lrwxr-xr-x  1 root  wheel     7 Jun 17 13:30 /usr/local/bin/python -> python2
lrwxr-xr-x  1 root  wheel    14 Jun 17 13:30 /usr/local/bin/python-config -> python2-config
-r-xr-xr-x  1 root  wheel  3420 Mar  6 01:22 /usr/local/bin/python-shared2.7
-r-xr-xr-x  1 root  wheel  1631 Mar  6 01:22 /usr/local/bin/python-shared2.7-config
lrwxr-xr-x  1 root  wheel     9 Jun 17 13:30 /usr/local/bin/python2 -> python2.7
lrwxr-xr-x  1 root  wheel    16 Jun 17 13:30 /usr/local/bin/python2-config -> python2.7-config
-rwxr-xr-x  1 root  wheel  8084 Jun 17 13:30 /usr/local/bin/python2.7
-rwxr-xr-x  1 root  wheel  1624 Jun 17 13:30 /usr/local/bin/python2.7-config

私は非常に長い間これに取り組んできましたが、途中で起こった多くの頭痛に非常に苛立ちました。誰か(おそらくグラハム・ダンプルトン!)が私を助けてくれるなら、それは素晴らしいことです

4

1 に答える 1

2

mod_wsgiドキュメントからの引用:

Q:WSGIアプリケーションに対して最初のリクエストが行われたときに、リクエストを処理するApacheサーバープロセスが「セグメンテーション違反」でクラッシュするのはなぜですか?

A:これはほとんどの場合、共有ライブラリのバージョンの競合が原因で発生します。つまり、Apacheまたは一部のApacheモジュールは、WSGIアプリケーションが使用する特定のPythonモジュールで使用されているものとは異なるバージョンのライブラリに対してリンクされています。最も一般的な原因は、expatライブラリとMySQLライブラリですが、他の共有ライブラリでも発生する可能性があります。

最初のリクエストでのみプロセスがクラッシュするもう1つの原因は、セカンダリPythonサブインタープリター内で機能するように実装されていないPython用のサードパーティのC拡張モジュールである可能性があります。SubversionのPythonバインディングは特定の例であり、Pythonによって作成された最初のインタープリターインスタンス内でWSGIアプリケーションを強制的に実行した場合にのみ、Pythonモジュールが正しく機能します。

これらの問題の詳細については、アプリケーションの問題のさまざまなセクションを参照してください。Expatライブラリの問題については、「Expatライブラリの問題」で詳しく説明しています。

ApacheとPythonの両方がにインストールされて/usr/local/いるようですので、それらをコンパイルしたと思います。コードで使用されているC拡張機能が適切なバージョンに対してもリンクされていることを確認する必要があります。もう1つのオプションは、mod_wsgiを介してロードしたときに動作が悪いバグのあるモジュールを使用していることです。

たとえば、mod_wsgiを使用せずにアプリケーションを実行できます./manage.pyか?

于 2012-06-19T00:13:51.443 に答える