Django 1.11+Amazon S3用于静态

Django 1.11+Amazon S3用于静态,django,amazon-s3,django-admin,django-staticfiles,django-settings,Django,Amazon S3,Django Admin,Django Staticfiles,Django Settings,我刚刚尝试在eu-central-1上使用AmazonS3在生产中提供静态文件。我用的是弹性豆茎和Django 1.11。此外,我使用boto3和它的包。我的问题是,即使collectstatic工作,文件现在在S3存储桶中,Django管理员仍然不使用静态文件 对于上下文,让我为您提供我使用的设置: import os from django.core.exceptions import ImproperlyConfigured # Static files (CSS, JavaScrip

我刚刚尝试在eu-central-1上使用AmazonS3在生产中提供静态文件。我用的是弹性豆茎和Django 1.11。此外,我使用boto3和它的包。我的问题是,即使collectstatic工作,文件现在在S3存储桶中,Django管理员仍然不使用静态文件

对于上下文,让我为您提供我使用的设置:

import os

from django.core.exceptions import ImproperlyConfigured

# Static files (CSS, JavaScript, Images)

STATICFILES_DIRS = [BASE_DIR.parent / 'myproject' / 'static']

INSTALLED_APPS += ['storages', ]


def get_env_variable(var_name):
    """Get the environment variable or return exception."""
    try:
        return os.environ[var_name]
    except KeyError:
        error_msg = 'Set the {} environment variable'.format(var_name)
        raise ImproperlyConfigured(error_msg)


AWS_ACCESS_KEY_ID = get_env_variable("ACCESS_KEY_ID")
AWS_SECRET_ACCESS_KEY = get_env_variable("SECRET_ACCESS_KEY")
AWS_S3_SIGNATURE_VERSION = 's3v4'
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}
AWS_STORAGE_BUCKET_NAME = get_env_variable("BUCKET_NAME")
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME
AWS_LOCATION = 'static'

STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
STATICFILES_STORAGE = 'config.settings.aws.utils.StaticRootS3BotoStorage'

DEFAULT_FILE_STORAGE = 'config.settings.aws.utils.MediaRootS3BotoStorage'
MEDIA_URL = 'https://%s.s3.amazonaws.com/media/' % AWS_STORAGE_BUCKET_NAME
MEDIA_ROOT = MEDIA_URL

ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'
S3_USE_SIGV4 = True
这些是设置,下面是我编写的utils函数:

from storages.backends.s3boto3 import S3Boto3Storage


def StaticRootS3BotoStorage(): return S3Boto3Storage(location='static')


def MediaRootS3BotoStorage(): return S3Boto3Storage(location='media')

有人知道哪里出了问题吗?为什么collectstatic可以工作,但Django Admin没有应用css和javascript?

我只是有一个“/”太多了

我刚刚更正了以下行:

AWS_S3_CUSTOM_DOMAIN = '%s.s3.eu-central-1.amazonaws.com' % AWS_STORAGE_BUCKET_NAME

现在它可以工作了。

您是否配置了S3访问策略?打开开发工具,看看S3中的URL是否有404或403错误?如果您在浏览器中的HTML中有正确的链接,那么您已经正确设置了Django,并解决了AWS配置的问题。接下来,它有点过时,但仍然为AWS配置提供了很好的参考。另请参阅CORS部分,这样您就不会在字体和其他方面遇到问题。@Alexandratarinov打开开发工具,看看S3中的URL是否有404或403错误?我该怎么做?你是说elastic beanstalk控制台中ec2实例的日志吗?没有404或403错误。如果你指的是用于bucket的开发工具,我不知道如何访问它们browser@AlexandrTatarinov它确实返回403错误!但在我的设置中,我设置了访问密钥和秘密访问密钥。而且,它确实起作用了!那么,为什么实际的网站无法访问呢?@Alexandratarinov,你这该死的上帝!谢谢,我从来没有尝试过使用常规的chrome开发控制台进行调试。多亏了这一点,我才发现自己吃得太多了。我将为此发布一个答案,非常感谢您的帮助!