2010-04-18 4 views
7

virtualenv에서 장고 응용 프로그램을 설치하고 패브릭 스크립트를 사용하여 배포를 원활하게 진행했으나 .wsgi가 작동하지 않아 인터넷에서 모든 변형을 시도했지만 불운. 내 .wsgi 파일은 다음과 같습니다 저도 같은 오류가 계속virtualenv에서 django + mod_wsgi가 작동하지 않습니다.

import os 
import sys 
import django.core.handlers.wsgi 

# put the Django project on sys.path 
root_path = os.path.abspath(os.path.dirname(__file__) + '../') 
sys.path.insert(0, os.path.join(root_path, 'kcdf')) 
sys.path.insert(0, root_path) 

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

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

:

[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159] mod_wsgi (pid=16938): Exception occurred processing WSGI script '/home/kcdfweb/webapps/kcdf.web/releases/current/kcdf/apache/kcdf.wsgi'. 
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159] Traceback (most recent call last): 
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159] File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/wsgi.py", line 230, in __call__ 
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159]  self.load_middleware() 
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159] File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py", line 33, in load_middleware 
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159]  for middleware_path in settings.MIDDLEWARE_CLASSES: 
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159] File "/usr/local/lib/python2.6/dist-packages/django/utils/functional.py", line 269, in __getattr__ 
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159]  self._setup() 
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159] File "/usr/local/lib/python2.6/dist-packages/django/conf/__init__.py", line 40, in _setup 
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159]  self._wrapped = Settings(settings_module) 
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159] File "/usr/local/lib/python2.6/dist-packages/django/conf/__init__.py", line 75, in __init__ 
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159]  raise ImportError, "Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e) 
[Sun Apr 18 12:44:30 2010] [error] [client 41.215.123.159] ImportError: Could not import settings 'kcdf.settings' (Is it on sys.path? Does it have syntax errors?): No module named kcdf.settings 

내 가상 환경/홈/한 사용자입니다/내 응용 프로그램/홈/사용자/웹 어플리케이션입니다 웹 어플리케이션/kcdfweb /kcdf.web/releases/current/project_name 내 WSGI 파일 홈/사용자/웹 어플리케이션/kcdf.web/버전/전류/프로젝트 이름/아파치/project_name.wsgi에게 당신은에서 최대 2 디렉토리를 추가 할 필요가

답변

1

당신의 wsgi 파일 대신에 :

root_path = os.path.abspath(os.path.dirname(__file__) + '../') 

당신은해야

root_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '../', '../')) 

... 당신의 WSGI 파일이 프로젝트 폴더 아래 apache라는 디렉토리에있다.

+0

는 작동하지 않았다, 주목할 가치가있을 수도 있습니다 시도가 나는 VIRTUALENV 외부 샘플 장고 프로젝트를 생성하고 그것을 내가 가지고 실행하려고 할 때 : jwesonga @ kcdf : ~/테스터 $ 수출 DJANGO_SETTINGS_MODULE = tester.settings을 jwesonga @ kcdf : ~/tester $ django-admin.py runserver 오류 : 'tester.settings'설정을 가져올 수 없습니다 (sys.path에 있습니까? 구문 오류가 있습니까?) : tester.settings라는 모듈이 없습니다 – jwesonga

0

virtualenv를 사용하는 경우 경로를 올바르게 설정하려면 WSGI 스크립트 내에서 활성화해야합니다.

root_path = os.path.abspath(os.path.dirname(__file__) + '../') 
activate_this = os.path.join(root_path, "bin/activate_this.py") 
execfile(activate_this, dict(__file__=activate_this)) 
+1

기술적으로 mod_wsgi에서 activate_this.py를 사용하면 sys.prefix를 사용하여 일부 코드에서 기술적으로 문제가 발생할 수 있으므로 사용하지 않는 것이 좋습니다. 'http://code.google.com/p/modwsgi/wiki/VirtualEnvironments'를 읽어보십시오. –

+0

또한 activate_this는 필요하지 않습니다. virtualenv site-packages 디렉토리에서 site.addsitedir()을 호출하면됩니다. –

+3

아니요, 특히 가상 환경을 만들 때 --no-site-packages를 사용하지 않은 경우 site.addsitedir()이 항상 충분하지 않습니다. 이는 site.addsitedir()이 sys.path 끝에 새 디렉토리를 추가하기 때문에 표준 Python 설치의 모든 항목이 여전히 우선 순위를 갖기 때문입니다. 스크립트의 목적은 sys.path를 재정렬하여 새로운 디렉토리가 시작되고 우선 순위를 갖도록하는 것입니다. mod_wsgi 사이트에 언급 된 문서를 읽으십시오. –

0

"kcdf"디렉토리에 __init__.py 파일이 있습니까? 설정 파일을 가져올 수 없으면 가져올 수 없습니다.

또한 virtualenv에서 항목을 가져올 것으로 예상되는 경우 virtualenv의 site-packages 디렉토리에서 site.addsitedir()을 호출해야합니다. 자세한 내용은 the mod_wsgi docs을 참조하십시오. 비록 당신의 설정을 가져올 수 없다하더라도, 나는 이것이 당신의 현재 문제라고 생각하지 않습니다.

7

mod_wsgi와 함께 Virtualenv를 사용하려면 docs을 사용하는 것이 좋습니다. 그들은 당신을 위해 더 잘 작동 할 수있는 virtualenv에 연결하기위한 몇 가지 대안적인 접근법을 제공합니다.

관련 문제