2011-09-28 6 views
0

처음부터 내가했던 모든 것을 자세하게 설명하는 긴 질문입니다. 희망이 도움이됩니다. 장고 응용 프로그램을 개발 중이며 프로덕션 서버에 배포해야합니다. 프로덕션 서버는 IT가 관리하는 가상 서버이며 루트 액세스 권한이 없습니다. 그들은/swadm 및/home/swadm에서 모듈 설치를 관리 할 수있는 권한을 나에게주었습니다. 그래서 나는 다음과 같은 배열을 생성 할 계획 한 :생산을위한 RHEL에서 python2.6.7 및 mod_wsgi3.3 구성 및 설치

나는 유지
  • /swadm/etc/httpd/conf을 httpd.conf
  • 내 아파치 모듈 (mod_wsgi에) 내 장고 코드를 유지
  • /swadm/var/www/django/app을 유지
  • /swadm/etc/httpd/user-modules
  • /swadm/usr/local/python/2.6 django, south 등의 모듈을 사용하여 Python 2.6.7 설치를 유지 관리합니다.
  • /home/swadm/setup 필요한 소스 tarball을 저장합니다. 모든 건물을 짓고 밖으로 설치하기.
  • /home/swadm/workspace 개발중인 응용 프로그램 코드를 유지 관리합니다.

시스템에 python2.4.3 및 python2.6.5가 설치되어 있지만 많은 사용자 정의 모듈을 설치해야하는 경우 필자는 자체 Python 설치를 유지할 것을 권장합니다.

그래서 python2.6.7 소스를 다운로드했습니다. 공유 라이브러리를 사용할 수 있도록 Python이 설치되었는지 확인해야했습니다. --enable-shared--prefix=/swadm/usr/local/python/2.6 옵션 만 사용하여 configure 스크립트를 실행하면 설치 될 것이지만 놀랍게도 시스템의 python2.6.5 설치를 가리키게됩니다.

$ /swadm/usr/local/python/2.6/bin/python 
Python 2.6.5 (r265:79063, Feb 28 2011, 21:55:45) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 

그래서 나는 예상되는 오류를 피하기 위해 (링크에서 알 수 있듯이) 내가 미리 디렉토리를 만들었다 확인하고

또한
./configure --enable-shared --prefix=/swadm/usr/local/python/2.6 LDFLAGS="-Wl,-rpath /swadm/usr/local/python/2.6/lib" 

Building Python with --enable-shared in non-standard location에서 지침에 따라 구성 스크립트를 실행. 이제 /swadm/usr/local/python/2.6/bin/python을 입력하면 올바른 파이썬 버전 2.6.7이 시작됩니다. 그래서 mod_wsgi를 설정하고 설치하는 것으로 넘어갔습니다. 나는

./configure --with-python=/swadm/usr/local/python/2.6/bin/python 

/usr/lib64/httpd/modules에 모듈을 설치하는 시도를 생성 된 메이크로 구성하고 내가 거기에는 쓰기 권한이 없습니다, 그래서 /swadm/etc/httpd/user-modules에 설치하는 메이크 파일을 수정했습니다. (명령 인수가있을 수 있지만 그것을 알아낼 수 없었다). 모듈이 잘 만들어졌습니다. 내가 사용하는 테스트 WSGI 스크립트는

import sys 

def application(environ, start_response): 
    status = '200 OK' 
    output = 'Hello World!' 
    output = output + str(sys.version_info) 
    output = output + '\nsys.prefix = %s' % repr(sys.prefix) 
    output = output + '\nsys.path = %s' % repr(sys.path) 
    response_headers = [('Content-type', 'text/plain'), 
        ('Content-Length', str(len(output)))] 
    start_response(status, response_headers) 
    return [output] 

이었다 그리고 표시된 출력은 그래서

Hello World!(2, 6, 5, 'final', 0) 
sys.prefix = '/swadm/usr/local/python/2.6' 
sys.path = ['/swadm/usr/local/python/2.6/lib64/python26.zip', '/swadm/usr/local/python/2.6/lib64/python2.6/', '/swadm/usr/local/python/2.6/lib64/python2.6/plat-linux2', '/swadm/usr/local/python/2.6/lib64/python2.6/lib-tk', '/swadm/usr/local/python/2.6/lib64/python2.6/lib-old', '/swadm/usr/local/python/2.6/lib64/python2.6/lib-dynload']` 

당신이 어떻게 든 mod_wsgi에 모듈이 여전히 시스템의 파이썬 2.6.5 설치 및 나의를 구성있어 참조 놀라운했다 정의 1. 나는 아파치에서 mod_wsgi documentation

  • 설정 WSGIPythonHome에 설명 된 여러 가지를 시도했다.파이썬 config 디렉토리에 심볼릭 링크를 생성 /swadm/usr/local/python/2.6/lib/python2.6
  • -/swadm/usr/local/python/2.6WSGIPythonPath에 conf의는

    $ 에선 -s ../../libpython2.6.so

    libpython2.6.so 파일을 가리 키도록

    $ ldd libpython2.6.so 
    linux-vdso.so.1 => (0x00007fffc47fc000) 
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b666ed62000) 
    libdl.so.2 => /lib64/libdl.so.2 (0x00002b666ef7e000) 
    libutil.so.1 => /lib64/libutil.so.1 (0x00002b666f182000) 
    libm.so.6 => /lib64/libm.so.6 (0x00002b666f385000) 
    libc.so.6 => /lib64/libc.so.6 (0x00002b666f609000) 
    /lib64/ld-linux-x86-64.so.2 (0x00000031aba00000) 
    

    그리고 ldd mod_wsgi.so 승기를 : 나는 ldd libpython2.6.so을 수행 할 때

이 내가 볼 것입니다 ves

$ ldd /swadm/etc/httpd/user-modules/mod_wsgi.so 
linux-vdso.so.1 => (0x00007fff1ad6e000) 
libpython2.6.so.1.0 => /usr/lib64/libpython2.6.so.1.0 (0x00002af03aec7000) 
libpthread.so.0 => /lib64/libpthread.so.0 (0x00002af03b270000) 
libdl.so.2 => /lib64/libdl.so.2 (0x00002af03b48c000) 
libutil.so.1 => /lib64/libutil.so.1 (0x00002af03b690000) 
libm.so.6 => /lib64/libm.so.6 (0x00002af03b893000) 
libc.so.6 => /lib64/libc.so.6 (0x00002af03bb17000) 
/lib64/ld-linux-x86-64.so.2 (0x00000031aba00000) 

저는 파이썬과 mod_wsgi를 재설치하고 다시 구성하려고했지만 아무 소용이 없습니다. 내가 어디로 잘못 가고 있는지 알려주세요. (매우 긴 게시물을 위해 죄송합니다)

TLDR; 루트가 아닌 액세스 권한이있는 시스템에는 기본 파이썬 설치가 있습니다. 나는 내 자신의 파이썬과 파이썬 모듈을 관리하고있다. mod_wsgi을 설정하고 사용자 정의 파이썬으로 빌드 한 후에도 sys version_info와 경로를 출력하는 테스트 스크립트를 실행할 때 시스템의 파이썬을 가리킨다.

UPDATE 다음에 유래 통해 브라우징에 은 나를 위해 오류를 해결 mod_wsgi python2.5 ubuntu 11.04 problem에 그레이엄 Dumpleton하여이 답을 발견 (이전을 했어야). 이제 ldd mod_wsgi.so을 실행하면 파이썬의 올바른 공유 라이브러리에 링크되어있는 것을 볼 수 있습니다. 이제 Django와 MySQLdb를 사용자 정의 Python 설치를 사용하여 설치했습니다. 그리고 지금은이 오류에 직면하고있다 :

The following error occurred while trying to extract file(s) to the Python egg 
cache: 
[Errno 13] Permission denied: '/var/www/.python-eggs' 
The Python egg cache directory is currently set to: 
/var/www/.python-eggs 
Perhaps your account does not have write access to this directory? You can 
change the cache directory by setting the PYTHON_EGG_CACHE environment 
variable to point to an accessible directory. 

그래서 나는 export PYTHON_EGG_CACHE=/swadm/var/www/.python-eggs을 수행하여 PYTHON_EGG_CACHE의 값을 변경했다. 하지만 여전히 같은 오류가 발생합니다. 나는 더 조사하고있다. 이 문제를 해결하면 업데이트됩니다. WSGI 스크립트 설정 환경 변수에 의해 해결

답변