2013-08-29 56 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-storage(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 順便說一句,你必須有調試=真正的服務於本地靜態 這可能會幫助您配置設置和LOCAL_SETTINGS

1

的問題是,你必須重新設置默認的存儲後端在您的local_settings.py文件中;首先處理settings.py文件,當你到達local_settings.py時,Django仍然使用默認值。

另一種策略(也許是更好的一種)是在settings.py中測試環境以確定您是本地還是遠程(即開發或生產),然後決定使用哪些設置。

編輯:那麼,作爲一個例子,AWS Django的導遊告訴你做這樣的事情:

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(或任何你想將它命名)來驅動配置的其餘部分。

相關問題