亚马逊S3用于生产django

时间:2013-04-01 16:38:12

标签: django django-storage

我正在使用django-s3-folder-storage来存储我的静态和媒体文件。我按照文档中提到的所有说明进行操作,但仍然无法提供静态文件。我可以为用户上传的文件提供服务,但即使在运行collectstatic命令后,静态文件也不会显示在网站上,而命令会将文件复制到存储桶中。我没有在我的域中创建任何CNAME记录(不确定这是否有任何区别,因为我能够看到用户上传的图像)。

我的设置文件:

DEFAULT_FILE_STORAGE = 's3_folder_storage.s3.DefaultStorage'
DEFAULT_S3_PATH = "media"
STATICFILES_STORAGE = 's3_folder_storage.s3.StaticStorage'
STATIC_S3_PATH = "static"
AWS_ACCESS_KEY_ID = # omitted
AWS_SECRET_ACCESS_KEY = # omitted
AWS_STORAGE_BUCKET_NAME = # omitted

MEDIA_ROOT = '/%s/' % DEFAULT_S3_PATH
MEDIA_URL = '//s3.amazonaws.com/%s/media/' % AWS_STORAGE_BUCKET_NAME
STATIC_ROOT = "/%s/" % STATIC_S3_PATH
STATIC_URL = '//s3.amazonaws.com/%s/static/' % AWS_STORAGE_BUCKET_NAME
ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'

STATICFILES_DIRS = (
       root('static'),
)

我的项目目录:

website_name
    static
    website_name
      settings.py

2 个答案:

答案 0 :(得分:0)

我已将STATIC_URL更改为如下所示,现在工作正常。

STATIC_URL ='// bucketname.s3.amazonaws.com/static /'

但MEDIA_URL就像在文档本身中提到的那样,并且MEDIA_URL工作正常。只有STATIC_URL需要修改。

看起来文档错误。

答案 1 :(得分:0)

通常,S3可以使用子域或子文件夹路径格式。此特定存储使用的django-storages的默认值是子域。所以有趣的是,更改为子文件夹解决了这个问题。 OP提到在different question中使用欧洲区域,我怀疑这里的根本问题与正在使用的端点有关,或者是S3 / S3BotoStorage的区域影响配置设置之一(例如AWS_CALLING_FORMAT