2012-05-03 6 views
10

Sono sorpreso di non vedere altro che "usare il sedano" durante la ricerca di come utilizzare i compiti di sedano con sorl-thumbnails e S3.Indicatori sull'utilizzo del sedano con miniature di sorl con archivi remoti?

Il problema: utilizzando depositi remoti provoca enormi ritardi quando si generano le miniature (si pensi 100s + per una pagina con molte miniature), mentre i download dei motori di miniature originali da Archiviazione remota, li scricchiolii, poi carica su di nuovo a S3.

Dove è un buon posto per impostare il compito di sedano in sorl e cosa dovrei chiamare?

Qualsiasi tua esperienza/idea sarebbe molto apprezzata.

Inizierò a scavare attorno agli interni di Sorl per trovare un posto più utile per ritardare questo compito, ma ci sono alcune altre cose che sono curioso di sapere se questo è stato risolto prima.

  1. Quale immagine viene restituita immediatamente? Sorl deve essere detto in qualche modo che l'immagine restituita non è la miniatura reale. La cache deve essere invalidata quando il sedano termina l'attività.

  2. gestire più richieste generazione delle miniature in modo pulito (solo bisogno il primo per una data chiave di cache)

Per ora, ho risolto temporaneamente questa utilizzando un nginx invertire proxy cache che può servire colpi mentre il backend spende tempo a generare pagine costose (ridimensionando enormi PNG su un'enorme griglia di prodotti) ma è un processo molto manuale.

+0

http://djangosnippets.org/snippets/1562/ potrebbe aiutare – jpic

+0

@jpic grazie, ma che ha 3 anni - sorl funziona già con archivi remoti. Quello di cui ho bisogno di aiuto è generare in modo asimmetrico le anteprime della memoria remota ... –

+0

@YujiTomita Avete mai avuto progressi con questo? Sarebbe bello ascoltare le tue scoperte. – jamesc

risposta

3

Penso che quello che si vuole fare è impostare THUMBNAIL_BACKEND in una classe personalizzata che sovrascriva il metodo _create_thumbnail. Invece di generare la miniatura in quella funzione, kick di un compito di sedani che chiama _create_thumbnail con gli stessi argomenti forniti alla funzione. La miniatura non sarà disponibile durante la richiesta, ma verrà generata in background.

3

Come ho capito, Sorl funziona correttamente con l'archiviazione S3 ma è molto lento.

Credo che tu sappia quali dimensioni di immagine ti servono.

È necessario avviare l'attività di sedano dopo che l'immagine è stata caricata. Nell'attività chiama allo sorl.thumbnail.default.backend.get_thumbnail(file, geometry_string, **options)

Sorl genera una miniatura e la carica su S3. La prossima volta che richiede immagini da un modello che è già memorizzato nella cache e servita direttamente dai server di Amazon

un modo pulito per gestire un'immagine segnaposto miniatura mentre l'immagine è in fase di elaborazione.

Per questo è necessario sostituire il back-end di Sorl. Aggiungi un nuovo argomento alla funzione get_thumbnail, ad es. generate=False.Quando si chiamerà questa funzione da passaggio sedano generate=True

E nel cambiamento funzione IT di logica, quindi se pollice non è presente e generate è vero si lavora proprio come il back-end standard, ma se generate è falso si ritorna l'immagine segnaposto con testo come "Elaboriamo la tua immagine ora, torna più tardi" e non chiamare backend._create_thumbnail. È possibile avviare un'attività in questo caso, se si ritiene che la miniatura possa essere eliminata accidentalmente.

Spero che questo aiuta

2

È possibile utilizzare Sorlery. Combina sorl e sedano per creare miniature tramite i lavoratori. Fa molta attenzione a non eseguire alcun accesso al filesystem al di fuori del thread di lavoro.

La miniatura restituita immediatamente (prima che l'operatore abbia avuto la possibilità) può essere controllata impostando il numero THUMBNAIL_DUMMY_SOURCE in un segnaposto appropriato.

Il lavoro viene creato la prima volta che viene richiesta la miniatura, le richieste successive vengono pubblicate nell'immagine fittizia fino al completamento del thread di lavoro.

+0

commento da lungo tempo: questo sembra fantastico. Grazie mille! Lo controllerò appena il mio prossimo progetto. Questo è stato il collo di bottiglia principale con l'utilizzo di archivi remoti .. le sfide ingegneristiche aggiunte dall'utilizzo di archivi remoti con l'ecosistema django e gli ostacoli operativi risolti con server di applicazioni realmente standalone. –

+0

Anche se questo è stato un esperimento interessante, penso che dovresti usare qualcosa come Cloudinary o Imgix. – Aidan

Problemi correlati