从S3服务Django的静态和媒体文件 [英] Serving Django's static and media files from S3

查看:200
本文介绍了从S3服务Django的静态和媒体文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个奇怪的问题,我不知道是什么导致了它。这是我目前的配置(使用的Heroku ):

I'm having a weird problem and I have no idea what's causing it. Here's my current config (using Heroku):

MEDIA_URL = '/media/'
STATIC_URL = '/static/'

STATICFILES_DIRS = (
os.path.join(PROJECT_DIR, '../static'),
)

#Determine if local or deployed.
if 'DATABASE_URL' in os.environ:
    STATICFILES_STORAGE     = 'storages.backends.s3boto.S3BotoStorage'
    AWS_ACCESS_KEY_ID       = 'A...A' 
    AWS_SECRET_ACCESS_KEY   = '...R' 
    DEFAULT_FILE_STORAGE    = 'storages.backends.s3boto.S3BotoStorage'

    # PRODUCTION OR STAGING
    if 'PROD' in os.environ:
        AWS_STORAGE_BUCKET_NAME = 's3.project.com'
        STATIC_URL = "https://s3.amazonaws.com/project/"
    else:
        AWS_STORAGE_BUCKET_NAME = 'project-staging'
        STATIC_URL = "https://s3.amazonaws.com/project-staging/"
else:
    STATIC_ROOT = ''

的事情是,静态文件工作正常,链接如下: https://s3.amazonaws.com/project-staging/img/homepage_left.png

The thing is, static files are working fine, the links look like this: https://s3.amazonaws.com/project-staging/img/homepage_left.png.

第一个问题(管理员断成两半):

First problem (Admin half broken):

该管理是成功的一半工作。 CSS文件送达罚款: <$c$c>https://project-staging.s3.amazonaws.com/admin/js/core.js?Signature=asdasdasd%3D&Expires=1352430664&AWSAccessKeyId=asdasdasA但所有的图像被破坏:

The admin is half working. CSS files are served fine: https://project-staging.s3.amazonaws.com/admin/js/core.js?Signature=asdasdasd%3D&Expires=1352430664&AWSAccessKeyId=asdasdasA but the all the images are broken:

<$c$c>https://project-staging.s3.amazonaws.com/admin?Signature=%2asdasdad%3D&Expires=1352430664&AWSAccessKeyId=asdasdaimg/icon_calendar.gif

我不知道为什么签名和AWSAccesskey在那里:(。如果删除它们(用手)网址工作​​正常!

I don't know why the Signature and AWSAccesskey are there :(. If I remove them (by hand) the URL works fine!

问题二(通过的ImageField / FileField或上传媒体):

Second problem (uploaded media via ImageField/FileField):

我用 {{} MEDIA_URL} {{object.flyer}} ,将其转换为 /媒体/媒体/传单/ poster_1巴纽,我怎么点它出来S3?它应该是这样的: https://project-staging.s3.amazonaws.com/media/flyers/poster_1.png

I'm using {{MEDIA_URL}}{{object.flyer}}, it translates to /media/media/flyers/poster_1.png, how do I point it out to s3? It should be like this: https://project-staging.s3.amazonaws.com/media/flyers/poster_1.png

推荐答案

对于第一个问题,我认为你需要做的:

For your first question, I think you need to do:

AWS_QUERYSTRING_AUTH = False

这篇关于从S3服务Django的静态和媒体文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆