运行collectstatic后未从AWS S3加载Django静态文件

问题描述 投票:0回答:1

我正在开发一个 Django 项目,我想在其中使用 AWS S3 存储和提供静态文件。我遵循了通常的配置步骤并设置了 settings.py 以将 S3 用于静态文件。但是,运行collectstatic后,我的静态文件未加载,并且我无法通过S3存储桶访问它们。

以下是我迄今为止所做工作的总结:

settings.py中的配置:

# AWS Credentials
AWS_ACCESS_KEY_ID = 'my-access-key'
AWS_SECRET_ACCESS_KEY = 'my-secret-key'
AWS_STORAGE_BUCKET_NAME = 'cats-gallery-amanda'

# S3 Static File Settings
AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com'
AWS_DEFAULT_ACL = 'public-read'
AWS_LOCATION = 'static'
AWS_QUERYSTRING_AUTH = False
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}

# Static Files Settings
STATIC_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/static/'
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

# Directories
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'setup/static'),
]

我尝试过的:

  1. 运行collectstatic:

命令:python管理.pycollectstatic 输出显示:0 个静态文件复制到“static/”,176 个未修改。

  1. S3 存储桶权限:

我已将存储桶策略设置为允许公共访问:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::cats-gallery-amanda/static/*"
    }
  ]
}

  1. 检查S3中的文件:

运行collectstatic后,static/下的S3桶中没有文件。

  1. 尝试的解决方案:
  • 验证已安装 django-storages 和 boto3。
  • 仔细检查 AWS 凭证。
  • 确保 S3 存储桶可公开访问。
  • 尝试手动上传文件到S3,效果很好。

我错过了什么?

我不明白为什么collectstatic 没有将静态文件上传到S3 存储桶。我还需要配置其他东西吗?如何从 S3 正确上传和提供静态文件?

如有任何建议或故障排除提示,我们将不胜感激!

django amazon-s3 static-files collectstatic
1个回答
0
投票

我更换了

STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

STORAGES = {
   "default": {
        "BACKEND" : "storages.backends.s3boto3.S3StaticStorage",
    },

    "staticfiles":  {
        "BACKEND" : "storages.backends.s3boto3.S3StaticStorage",
    },
}

效果很好。

© www.soinside.com 2019 - 2024. All rights reserved.