【问题标题】:Django local version using remote static files despite local settings尽管有本地设置,但 Django 本地版本使用远程静态文件
【发布时间】:2013-09-01 13:14:19
【问题描述】:

我已经成功地将我的 Django 应用程序部署到 AWS Elastic Beanstalk(使用 eb)。我已按照http://www.youtube.com/watch?v=YJoOnKiSYwshttp://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 文件?

【问题讨论】:

    标签: django boto django-staticfiles django-storage


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-04
        • 2011-06-22
        • 2012-02-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多