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 进行静态文件管理。

我的 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 文件?

4

2 回答 2

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(或任何您想命名的名称)来驱动其余的配置。

于 2013-09-27T02:42:33.973 回答
0

你可以发布你的 urls.py 顺便说一句你必须有 debug=True 才能在本地提供静态服务这可能会帮助你配置你的设置和 local_settings

于 2013-08-29T14:42:11.657 回答