2013-08-29 1 views
1

Мне удалось успешно развернуть мое приложение Django для AWS Elastic Beanstalk (используя eb). Я выполнил шаги, изложенные здесь http://www.youtube.com/watch?v=YJoOnKiSYws, а здесь http://grigory.ca/2012/09/getting-started-with-django-on-aws-elastic-beanstalk/ и использую структуру django-storages (boto), чтобы помочь с управлением статическими файлами на S3.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

Вы можете оставить свой urls.py Кстати, вы должны иметь отлаживать = True, чтобы служить статическим локально Это может помочь вам настроить параметры и local_settings

1

Проблема в том, что вы должны сбросить память по умолчанию backends в файле 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 (или что вы хотите назвать его), чтобы управлять остальной конфигурации.

Смежные вопросы