Rake uploads:migrate_from_s3 fallisce

@pnoeric dato che sei preoccupato per la disponibilità del sito, ho pensato di condividere con te ciò che ho imparato finora.

Ho eseguito la migrazione in tempo reale, come ho già detto. Se non limito la velocità della migrazione, le code che gestiscono cose come le notifiche agli utenti sull’attività reciproca si intasano e l’esperienza utente del sito ne risente.

Ho migrato circa 500 post con video e circa 30.000 post con immagini, un’operazione che ha richiesto circa due settimane per essere completata.

Se vuoi provare il codice che ho usato, è attualmente disponibile all’indirizzo

Puoi scaricarlo e copiarlo nella tua applicazione per sostituire il contenuto attuale di lib/tasks/uploads.rake.

Con questo codice, puoi fare qualcosa del genere:

bin/rake uploads:batch_migrate_from_s3[100,1000]

Questo considererà solo 1000 post con file caricati in totale e migrerà file da un massimo di 100, prima di fermarsi; ogni volta che modifica effettivamente un post dopo aver migrato i suoi allegati, attenderà che la coda sia vuota prima di procedere con il successivo.

Se copi il file, interromperai gli aggiornamenti futuri del sito finché non annullerai la modifica. Il modo più semplice per annullarla una volta soddisfatto è semplicemente ./launcher rebuild app (anche se, come sviluppatore, uso git checkout HEAD lib/tasks/uploads.rake per annullare le mie modifiche…).

Ho notato che almeno con gli spazi di Digital Ocean, a volte devo riprovare diverse volte prima che una migrazione abbia successo. Lo script, così com’è, non ti avvisa quando ciò accade; devi semplicemente continuare a eseguirlo e aspettare di vedere se funziona. Ho una PR in attesa di revisione che stampa gli errori in questi casi, così almeno sai che qualcosa è andato storto.

Ho aggiunto un semplice ciclo di riprova breve, oltre al messaggio di errore, e sembra che il ciclo di riprova risolva il problema. Inoltre, la convalida rispetto alle regole attuali veniva eseguita sul contenuto grezzo dei post passati, il che poteva interrompere la migrazione e lasciare silenziosamente post che necessitavano di essere rielaborati; ho anche corretto questo problema. Non vorrai assolutamente eseguire una migrazione senza ottenere almeno la correzione della convalida, che è uno dei commit nella mia PR attualmente in fase di revisione.

Ho completato la mia migrazione, per quanto ne so. La mia PR contiene tutto il codice che ho utilizzato per completare la migrazione. Non è ancora stata revisionata. Ti suggerisco di seguire l’evoluzione qui: Migrate_from_s3 problems se lo desideri.