【问题标题】:Django custom static files not collected to s3 bucketDjango 自定义静态文件未收集到 s3 存储桶
【发布时间】:2017-09-01 06:17:04
【问题描述】:

我正在配置我的 Django 项目以使用 S3 存储桶来存储静态和媒体文件,用于本地和生产设置。

我的项目树如下:

   src/
      blog/
          settings/
                  __init__
                  local.py
                  production.py
          s3utils.py
          [..]
      [..]

我的local.py:

access_key = "xx"
secret_key = "yy"

AWS_ACCESS_KEY_ID = access_key
AWS_SECRET_ACCESS_KEY = secret_key
AWS_STORAGE_BUCKET_NAME = 'zz'


STATICFILES_STORAGE = 'blog.s3utils.StaticRootS3BotoStorage'
DEFAULT_FILE_STORAGE = 'blog.s3utils.MediaRootS3BotoStorage'
S3DIRECT_REGION = 'us-west-2'
S3_URL = 'http://%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME
MEDIA_URL = 'http://%s.s3.amazonaws.com/media/' % AWS_STORAGE_BUCKET_NAME
MEDIA_ROOT = MEDIA_URL
STATIC_URL = S3_URL + "/static/"
ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'

import datetime

two_months = datetime.timedelta(days=61)
date_two_months_later = datetime.date.today() + two_months
expires = date_two_months_later.strftime("%A, %d %B %Y 20:00:00 GMT")

AWS_HEADERS = { 
    'Expires': expires,
    'Cache-Control': 'max-age=%d' % (int(two_months.total_seconds()), ),
}

我的s3utils.py:

from storages.backends.s3boto import S3BotoStorage

StaticRootS3BotoStorage = lambda: S3BotoStorage(location='static') 
MediaRootS3BotoStorage  = lambda: S3BotoStorage(location='media') 

当我跑步时:

python manage.py collectstatic

只有 (django) 管理静态文件被复制到我的 s3 存储桶中。

我认为问题在于我错误地配置了我的 IAM 用户的权限,但实际上我确实有权将 'admin/' 文件复制到 s3 存储桶。

感谢您提供的任何帮助。

【问题讨论】:

    标签: python django amazon-web-services amazon-s3


    【解决方案1】:

    将STATICFILES_DIRS添加到您的设置中。

    STATICFILES_DIRS = [
        "/path/to/your/static",
    ]
    

    https://docs.djangoproject.com/en/1.10/ref/settings/#std:setting-STATICFILES_DIRS

    【讨论】:

    • 谢谢@Rafael,你成就了我的一天!
    猜你喜欢
    • 2020-03-13
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 2021-10-14
    • 2021-10-12
    相关资源
    最近更新 更多