2012-11-09 27 views
5

Tôi đang gặp vấn đề lạ và tôi không biết nguyên nhân gây ra nó. Dưới đây là cấu hình hiện tại của tôi (sử dụng Heroku):Cung cấp các tập tin tĩnh và phương tiện của Django từ S3

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 = '' 

Vấn đề là, các file tĩnh đang làm việc tốt, các liên kết giống như thế này: https://s3.amazonaws.com/project-staging/img/homepage_left.png.

Vấn đề đầu tiên (Quản trị nửa bị hỏng):

Quản trị viên đang hoạt động một nửa. file CSS được phục vụ tốt: https://project-staging.s3.amazonaws.com/admin/js/core.js?Signature=asdasdasd%3D&Expires=1352430664&AWSAccessKeyId=asdasdasA nhưng tất cả những hình ảnh được chia:

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

Tôi không biết lý do tại sao Chữ ký và AWSAccesskey đang có :(Nếu tôi loại bỏ chúng (bằng tay) các công trình URL. tốt

vấn đề thứ hai (tải lên phương tiện truyền thông qua ImageField/FileField):

tôi đang sử dụng {{MEDIA_URL}}{{object.flyer}}, nó dịch để /media/media/flyers/poster_1.png, làm thế nào để trỏ nó ra S3 nó phải là như thế này:? https://project-staging.s3.amazonaws.com/media/flyers/poster_1.png

Trả lời

0

trả lời cho câu hỏi thứ hai của bạn: bạn cần phải thiết lập MEDIA_URL = https://project-staging.s3.amazonaws.com/media/ giống như bạn đang làm cho STATIC_URL

0

Đối với câu hỏi đầu tiên của bạn, tôi nghĩ rằng bạn cần phải làm:

AWS_QUERYSTRING_AUTH = False 
Các vấn đề liên quan