2014-11-25 3 views
2

내 정적 파일을 수집하고 Amazon Bucket (AWS S3)에 저장 한 후 프로젝트를 로컬에서 실행할 때 여전히 온라인에 저장된 staticfiles를 사용하므로 변경을 원할 때 문제가 발생합니다 예를 들어 CSS 파일에서 collectstatic을 실행하거나 수동으로 파일을 Amazon에 업로드해야한다.Django. 로컬 및 원격 staticfiles 간의 대체

settings.py

LOCAL_STATICFILES = False 
if not LOCAL_STATICFILES: 
    DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage' 
    AWS_ACCESS_KEY_ID = os.environ['AWSAccessKeyId'] 
    AWS_SECRET_ACCESS_KEY = os.environ['AWSSecretKey'] 
    AWS_STORAGE_BUCKET_NAME = os.environ['AWS_STORAGE_BUCKET_NAME'] 
    S3_URL = 'http://%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME 
    STATIC_URL = S3_URL 
    STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage' 

if LOCAL_STATICFILES: 
    STATIC_URL = '/static/' 

STATIC_ROOT = '/' 

을하지만 사실과의 runserver에 LOCAL_STATICFILES을 켤 때, 장고 그들을 찾을 수 없습니다 :이 같은 새로운 설정 변수 "LOCAL_STATICFILES"을 추가했습니다.

프로젝트의 폴더

는 다음과 같다 :

  • 프로젝트
    • 응용 프로그램
    • 응용 프로그램
    • 정적
      • CSS
      • JS
      • IMG
    • 템플릿 내가 잘못 뭐하는 거지

?

답변

1

우선 : Amazon 버킷 구성을 지원하는 환경에서 사용자의 존재 여부를 구분할 수있는 방법을 제공하십시오. 이것은 대개 아마존 버킷 설정을 구성한 프로덕션 환경 일 것입니다. 그래서

당신은 :

BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 
# this is the base project path 

if 'AWSAccessKeyId' in os.environ: 
    # assume the presence of this key will determine whether 
    # we are, or not, in the bucket-supporting environment 

    DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage' 
    AWS_ACCESS_KEY_ID = os.environ['AWSAccessKeyId'] 
    AWS_SECRET_ACCESS_KEY = os.environ['AWSSecretKey'] 
    AWS_STORAGE_BUCKET_NAME = os.environ['AWS_STORAGE_BUCKET_NAME'] 
    STATIC_URL = 'http://%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME 
    # static url will be the re 
    STATIC_ROOT = None 
    # STATIC_ROOT doesn't matter since you will not invoke 
    # `manage.py collectstatic` from this environment. You 
    # can safely let it to None, or anything like: 
    # os.path.join(BASE_DIR, 'static') 
else: 
    STATIC_URL = '/static/' 
    # the static files url will point to your local, 
    # development, server 
    STATIC_ROOT = os.path.join(BASE_DIR, 'static') 
    # here, STATIC_ROOT matters, since you will invoke 
    # `manage.py collectstatic` from your local environment. 
관련 문제