2013-01-10 14 views
11

Sto riscontrando un errore molto strano nell'uso delle miniature di sorl nel mio progetto django che utilizza S3 per i file multimediali. Ho effettuato le mie impostazioni come indicato in questa risposta https://stackoverflow.com/a/12848650/538191 e in effetti tutti i miei altri file multimediali vengono generati correttamente.URL errato con Django Sorl anteprima con Amazon s3

Ma per le immagini generate le miniature SORL sto ottenendo un URL come questo

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

Il problema è strano perché la sua aggiungendo il percorso di archiviazione S3 per l'URL dell'immagine, ma la sua non aggiungendo/media/nel mezzo. Se si seleziona

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

l'immagine esiste realmente lì, ma dal momento che l'URL viene generata sbagliato, io sono sempre un'immagine rotto. Nel file delle impostazioni che ho dichiarato il DEFAULT_FILE_STORAGE utilizzando s3boto e contiene

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

non riesco a capire il motivo per cui fa il percorso dell'immagine SORL miniatura non contiene media in.

Qualsiasi aiuto è apprezzato.

Aggiornamento

Invece di essere risolto, il problema si è infatti aggravata. Quello che ho fatto è che ho cancellato il KVStore in anteprima e tutto il database è stato cancellato. Ero felice perché pensavo che il problema fosse risolto, stavo ricevendo l'url corretto ora. Ma poi ho aggiornato la pagina e di nuovo ho ricevuto l'URL sbagliato. Non capisco cosa sta succedendo, se cancello l'anteprima db, mostra l'url corretto una volta e dopo di ciò mostra di nuovo l'URL sbagliato.

+1

I primi sono URL sicuri, per prima cosa assicurati che l'impostazione AWS_S3_SECURE_URLS sia False, o l'impostazione AWS_S3_CUSTOM_DOMAIN sia impostata su –

+1

Ho anche riscontrato problemi simili. Se il tuo DEFAULT_FILE_STORAGE è impostato come S3, puoi mantenere MEDIA_URL = '/ media /'. Ma aggiungi l'impostazione AWS AWS_LOCATION = '/ media /'. Penso che questo risolva il problema. – chhantyal

risposta

28

Scommetto che stai usando qualcosa di simile:

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

Tuttavia, questo provoca problemi in SORL-thumbnail perché serializza la classe di memorizzazione nella cache utilizzando il nome della classe. Successivamente, quando deserializza, viene istanziato come S3BotoStorage() senza il parametro location. Ecco perché funziona per la prima volta ma poi fallisce più tardi.

È possibile risolvere il problema utilizzando una classe a tutti gli effetti, invece di una fabbrica:

class MediaS3BotoStorage(S3BotoStorage): 
    location = 'media' 

Speranza che aiuta!

+1

Grazie! Ho salvato la mia giornata! –

+1

Massive ringraziamenti :) –

+0

Se si dispone di questo problema nel 2017 con boto3 == 1.4.3, è preferibile utilizzare MediaRootS3BotoStorage. –

Problemi correlati