2013-01-10 22 views
11

Medya dosyaları için S3 kullanan django projemde sorl küçük resimlerinin kullanılmasında çok garip bir hata yaşıyorum. Ayarlarımın https://stackoverflow.com/a/12848650/538191 numaralı yanıtında belirtildiği gibi yaptım ve aslında tüm diğer medya dosyalarım doğru şekilde üretiliyor. Django Sorl ile yanlış url Amazon s3 ile

Ama görüntüler için

Ben onun görüntü url S3 depolama yolunu ekleyerek, ama onun ekleyerek çünkü sorunun garip bu

https://he-s3.s3.amazonaws.com/cache/6f/cb/6fcb83175cb63f754fba9facec5dda7f.jpg?Signature=tgDEXyRV3gl3QtK%2BvwliqAtWqpM%3D&Expires=1357853609&AWSAccessKeyId=AKIAJLE6MUHDYS3HN6YQ

gibi bir url alıyorum sorl küçük aracılığıyla oluşturulan/ortam/arasında. Eğer

https://he-s3.s3.amazonaws.com/media/cache/6f/cb/6fcb83175cb63f754fba9facec5dda7f.jpg

işaretlerseniz görüntü aslında vardır, ama url yanlış oluşturuluyor beri, bozuk görüntü alıyorum. ayarlar dosyasında ben s3boto kullanarak DEFAULT_FILE_STORAGE ilan ettiler ve ben medyayı içermemesi sorl küçük resim yolu neden yaptığını anlamak için başarısız

S3_URL = 'http://he-s3.s3-website-ap-southeast-1.amazonaws.com' 
MEDIA_URL = S3_URL + '/media/' 

içerir.

Herhangi bir yardım için teşekkür ederiz.

Güncelleme

yerine çözülürken, sorun aslında karmaşık hale getirdi. Yaptığım şey, KVStore'u küçük resimlerle temizlediğimdi ve tüm veritabanı temizlendi. Mutluydum çünkü sorunun çözüldüğünü sanıyordum, şimdi doğru URL'yi alıyordum. Ama sonra sayfayı yeniledim ve tekrar yanlış URL aldım. Neler olduğunu anlamıyorum, eğer küçük resmi db temizlerseniz, doğru URL'yi bir kez gösterir ve bundan sonra yanlış URL'yi gösterir.

+1

Birincisi, güvenli URL'lerdir, önce AWS_S3_SECURE_URLS ayarının Yanlış olduğundan emin olun, ya da AWS_S3_CUSTOM_DOMAIN ayarı –

+1

ayarında da benzer bir sorunla karşılaşıyorum. DEFAULT_FILE_STORAGE ürününüz S3 olarak ayarlanmışsa, MEDIA_URL = '/ media /' öğesini tutabilirsiniz. Ancak AWS ayarını AWS_LOCATION = '/ media /' olarak ekleyin. Sanırım bu sorunu çözecek. – chhantyal

cevap

28

Ben böyle bir şey kullandığınız bahse girerim: Bu sınıf adını kullanarak önbelleğine depolama sınıfını serializes çünkü

MediaS3BotoStorage = lambda: S3BotoStorage(location='media') 

Ancak bu sorl-küçük resimde sorunlara neden olmaktadır. Daha sonra seri hale getirildiğinde, konum parametresi olmayan S3BotoStorage() olarak görünür. Bu yüzden sizin için ilk kez çalışıyor ama sonra başarısız oluyor.

Onun yerine bir fabrikanın tam teşekküllü sınıfını kullanarak çözebilirsiniz: yardımcı

class MediaS3BotoStorage(S3BotoStorage): 
    location = 'media' 

Umut!

+1

Teşekkürler! Günümü kurtardım! –

+1

Büyük teşekkürler :) –

+0

Bu sorunu 2017 yılında boto3 == 1.4.3 ile yapıyorsanız, bunun yerine MediaRootS3BotoStorage kullanmanız daha iyi olur. –