2013-08-29 4 views
1

내 장고 앱을 AWS Elastic Beanstalk (eb 사용)에 성공적으로 배포 할 수있었습니다. 나는 여기서 http://www.youtube.com/watch?v=YJoOnKiSYws과 여기에 http://grigory.ca/2012/09/getting-started-with-django-on-aws-elastic-beanstalk/으로 표시된 단계를 따라 왔으며 S3에 대한 정적 파일 관리를 돕기 위해 django-storages (boto) 프레임 워크를 사용하고 있습니다.로컬 설정에도 불구하고 원격 정적 파일을 사용하는 Django 로컬 버전

내 SETTINGS.PY에서 다음 설정이 있습니다

STATIC_ROOT = os.path.join(
    os.path.dirname(
     os.path.dirname(
      os.path.abspath(__file__))), 'static') 

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage' 
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage' 
AWS_ACCESS_KEY_ID = 'access-key' 
AWS_SECRET_ACCESS_KEY = 'secret-key' 
AWS_STORAGE_BUCKET_NAME = 'bucket-name' 
STATIC_URL = '/static/' 
STATICFILES_DIRS =() 
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
) 
. 
. 
. 
try: 
from local_settings import * 
except ImportError, e: 
pass 

을 내 LOCAL_SETTINGS.PY는 다음이 있습니다 : 내가 사용하는 내 템플릿에서

STATIC_ROOT = '' 
STATIC_URL = '/static/' 
STATICFILES_DIRS = (
    ('js', '/blah/blah/static/js'), 
    ('css', '/blah/blah/static/css'), 
    ('images', '/blah/blah/static/images'), 
) 

을 :

{% load staticfiles %} 
<link href="{% static "css/styles.css" %}" rel="stylesheet"> 

문제는 응용 프로그램을 로컬에서 실행할 때 내 로컬 디렉토리가 아닌 S3의 정적 파일을 참조한다는 것입니다. 변경해야하는 설정은 로컬에서 응용 프로그램을 실행할 때 로컬 정적 파일을 사용하고 AWS에서 실행될 때 S3 파일을 사용하도록 변경해야합니까?

답변

0

당신은 BTW 당신이 당신이 당신의 설정과 local_settings에

1

문제를 구성하는 데 도움이 될 로컬 정적을 봉사 할 진정한 = 디버깅을해야 당신의 urls.py 를 게시 할 수있는 기본 저장 장치를 다시 설정해야한다는 것입니다 local_settings.py 파일의 백엔드; settings.py 파일이 먼저 처리되고, local_settings.py에 도착하면 Django는 여전히 기본값을 사용합니다.

대체 전략 (또는 아마도 바람직한 설정)은 settings.py에서 환경을 테스트하여 로컬 또는 원격 (즉, 개발 또는 생산)인지 확인한 다음 사용할 설정을 결정하는 것입니다.

편집 : 그래서, 예를 들어, AWS 장고 가이드는이 같은 뭔가를 말해 :

if 'RDS_DB_NAME' in os.environ: 
    DATABASES = { 
     'default': { 
      'ENGINE': 'django.db.backends.mysql', 
      'NAME': os.environ['RDS_DB_NAME'], 
      'USER': os.environ['RDS_USERNAME'], 
      'PASSWORD': os.environ['RDS_PASSWORD'], 
      'HOST': os.environ['RDS_HOSTNAME'], 
      'PORT': os.environ['RDS_PORT'], 
     } 
    } 

그리고

다음, local_settings.py에, 당신은 당신의 로컬 구성에 대한 데이터베이스를 정의합니다. 내가 과거에했던 것은이 같은 것입니다 :

if 'RDS_DB_NAME' in os.environ: 
    LOCAL_ENVIRONMENT = False 
    DATABASES = { 
     'default': { 
      'ENGINE': 'django.db.backends.mysql', 
      'NAME': os.environ['RDS_DB_NAME'], 
      'USER': os.environ['RDS_USERNAME'], 
      'PASSWORD': os.environ['RDS_PASSWORD'], 
      'HOST': os.environ['RDS_HOSTNAME'], 
      'PORT': os.environ['RDS_PORT'], 
     } 
    } 

을 그리고 LOCAL_ENVIRONMENT를 사용 (또는 당신은 그것을 이름을 원하는대로) 구성의 나머지 부분을 구동 할 수 있습니다.