2011-04-07 3 views
3

다른 사람들과 마찬가지로 쉬운 질문이 아닙니다. 그것은Django StaticFiles APP 및 Wsgi

https://bitbucket.org/sirex/django-starter/src

이 ..이 하나의 배포 및 전체 프로젝트를 만들기위한 buildout 및 모듈 장고 사용하고 여기에 같은 흥미로운 프로젝트 있어요 ... 설치 간단한-DIR 기반의 정적 파일 위치에 문제가 아니에요 한 번에. 당신은 dev에서 생산 모드로 쉽게 마이그레이션 할 수 있습니다. dir의 이름을 변경하고 "make"라고 입력하면됩니다. 파이썬 서버 및 아파치 mod_wsgi 작동하지 않습니다 : 기본 정적 파일 위치 : "var/htdocs/정적"입니다. 예를 들어, apps/myapp/myapp/static /과 같은 하나의 정적 디렉토리 위치로 덮어 쓸 수 있습니다. 이것은 파이썬 웹 서버에서 작동하지만 wsgi/apache에서는 작동하지 않습니다. wsgi 다른 기본 디렉토리를 볼 수 없습니다 .. 예 : http://localhost:8000/static/css/main.css 작동하지만 아파치와 동일한 URL이 작동하지 않습니다. 이 파일은 myproject/apps/myapp/myapp/static/css/main.css에 있습니다. 기본 정적 디렉토리는 var/htdocs/static =입니다.

StaticFiles 응용 프로그램의 설정에서 변경된 내용을 이해하는 한. py

STATIC_URL = '/static/' 
STATIC_ROOT = os.path.join(BUILDOUT_DIR, 'var', 'htdocs', 'static') 
STATICFILES_DIRS = (
    os.path.join(BUILDOUT_DIR, 'project', 'static'), # <-- why "project" and not "apps" I don't know X_X 
) 

아마도이 하나가 잘못되었습니다. 아파치 vhost는 기본 위치 ..와 함께 작동하고 "var/htdocs/static"으로 설정됩니다.

아마도 wsgi 스크립트에 문제가 있습니까?

#!/usr/local/bin/python2.6 

import os,sys 
sys.path[0:0] = [ 
    '/usr/local/lib/python2.6/site-packages/', 
    '/www/webapp/visimes/eggs/PIL-1.1.7-py2.6-freebsd-8.1-RELEASE-amd64.egg', 
    '/www/webapp/visimes/eggs/South-0.7.3-py2.6.egg', 
    '/www/webapp/visimes/eggs/django_annoying-0.7.6-py2.6.egg', 
    '/www/webapp/visimes/eggs/coverage-3.4-py2.6-freebsd-8.1-RELEASE-amd64.egg', 
    '/www/webapp/visimes/eggs/django_debug_toolbar-0.8.4-py2.6.egg', 
    '/www/webapp/visimes/eggs/django_extensions-0.6-py2.6.egg', 
    '/www/webapp/visimes/eggs/django_test_utils-0.3-py2.6.egg', 
    '/www/webapp/visimes/eggs/ipdb-0.3-py2.6.egg', 
    '/www/webapp/visimes/eggs/ipython-0.10.1-py2.6.egg', 
    '/www/webapp/visimes/eggs/djangorecipe-0.21-py2.6.egg', 
    '/www/webapp/visimes/eggs/zc.recipe.egg-1.3.2-py2.6.egg', 
    '/www/webapp/visimes/eggs/zc.buildout-1.5.2-py2.6.egg', 
    '/www/webapp/visimes/eggs/BeautifulSoup-3.2.0-py2.6.egg', 
    '/www/webapp/visimes/eggs/setuptools-0.6c12dev_r88795-py2.6.egg', 
    '/www/webapp/visimes/parts/django', 
    '/www/webapp/visimes', 
    '/www/webapp/visimes/project', # <-- this one need for monitor.py which i put in there 
    '/www/webapp/visimes/apps/portal', # <-- startapp.sh script some how forgot to add this dir, it's my default app dir, which must be generated with startapp.sh and added in here.. 
    ] 

import djangorecipe.wsgi 

if __name__ == '__main__': 
    djangorecipe.manage.main('project.development') 

os.environ['DJANGO_SETTINGS_MODULE'] = 'project.development' 

import monitor 
monitor.start(interval=1.0) 

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

나는 내 자신으로 마지막 4 줄을 추가했습니다. 왜냐하면 내가 아파치를 시작할 수 없기 때문이다. 나는 djangorecipe.wsgi가 staticFile 오버라이드로 다른 모든 것을 처리해야한다고 생각한다. 어쨌든 리눅스 나 맥을 사용한다면 그 패키지를 체크하고 자기가 시도해 보라. 작동해야 함

ps. (btw bin/django는 bin/django.wsgi로 공표해야하며 etc/apache.conf는 아파치 용 가상 호스트로 생성됩니다.)

누군가가 wsgi를 사용하여 수동으로이 "Starter"를 시작하려고한다면 정말 사과 할 것입니다. . 당신은 모든 것을 이해하는 것 =)

편집 :. 그는 장고 설정에서 기본 위치를 정적 파일을 따로 검색 할 필요가 WSGI이 이해할 수있는 방법에 대한 모든 정보는, 정말 감사합니다 =)

+0

당신은/your/path/to /에있는 서버 정적 파일에 대한 아파치 설정 내 별명을 지정했습니다. 공전/? –

+0

어떨까요? http://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#django-admin-collectstatic 어떻게 작동합니까? 그것은 여러 위치에서 정적 파일을 수집 할 수 있습니까? – holms

+1

다시 정적 파일을 호스팅하는 위치를 가리키는 Apache 구성에 별칭을 추가하면 Apache (또는 다른 웹 서버) 만 정적 파일을 제공 할 수 있습니다. 예, collectstatic 명령을 사용하여 모든 정적 파일을 한 위치에 수집해야합니다 (편의를 위해 또는 다른 위치에 많은 별명을 설정하지 않으려는 경우). staticfiles 응용 프로그램은 주로 collectstatic과 같은 작업을하지 않거나 서버 구성에 별칭을 추가하지 않고도 로컬 dev 서버에서 개발할 수 있도록 도와줍니다. 프로덕션 환경에서 유일한 용도는 템플릿에 STATIC_URL을 (를) 사용하는 것입니다. –

답변

1

장고는 WSGI와 함께하는 것처럼 오버라이드 (override) 어떤 종류의를 갖는 방법이 ..

에서 모든 파일을 저장합니다 "manage.py collectstatic"장고에 큰 명령이있다 STATIC_DIR 목록 (settings.py)에서 기본 정적 디렉토리 .. 사실이 명령은 그 모든 dir의 파일을 복사 만합니다. =)

위의 경우 자동으로 복사 할 수 있습니까? 해당 디렉토리의 모든 파일이 업데이트됩니다. 소스가 수정되면 자동 wsgi를 다시로드하는 것과 같은 monitor.py ...

1

이 WSGI가 무관 무엇이든 정적 파일을 제공합니다. 이것은 Django 배포 문서에서 모두 다룰 수 있습니다. Torsten이 주석에서 제안한 것처럼 별칭을 통해 Apache에 정적 파일을 지정해야합니다.

나는이 프로젝트가 매우 사납게 보일지라도 말해야 만한다. sys.path에 달걀을 수동으로 추가하는 것은 올바른 방법이 아닙니다. 훨씬 더 나은 방법은 virtualenv와 같은 것을 사용하는 것입니다. virtualenv는 모든 것을 관리합니다.

+0

"collectstatic"은 어떨까요? – holms

+0

어때? 이것은 정적 파일을 한 곳으로 모으는 관리 명령으로, Apache에서 직접 제공합니다. –

+0

그게 내가 필요한거야. ... – holms