我已成功将我的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进行静态文件管理。
我的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 :(得分: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中,为本地配置定义DATABASES。我过去做过的事情是这样的:
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(或任何您想要的名称)来驱动其余的配置。
答案 1 :(得分:0)
你能发布你的urls.py吗? 顺便说一句,你必须有debug = True才能在本地提供静态服务 这可能有助于您配置设置和local_settings