Gestione integrata upgrade applicazione

Ciao per caso Yii ha la gestione delle release dell’applicazione integrata come in Rails?

C’è in pratica una gestione interna dell’upgrade del database quando aggiorno la versione della webapplication?

Lo strumenti si chiama migration. Personalmente non ne ho mai fatto uso, ma qualche volta ne sento la necessità. In genere spendo moltissimo tempo in modellazione del database e per quel che ho fatto sino ad ora lo sforzo mi ha ripagato: quasi nessuna modifica al db. Ma la migration è una delle cose che bisognerebbe sapere senz’altro su yii per gestire l’avanzamento del db in un software web distribuito.

Visto ora.

Spiccicato a Rails.

Senti ma c’è un modo per far partire l’update alla prima pagina che si apre dopo l’upgrade dell’applicazione… nel senso…

1-aggiorno tutta la webroot

2-il primo utente apre l’home page. Il controller si accorge che c’è una nuova release e avvia gli script di migration prima di competare la richiesta

3-ora che le migrazioni sono state completate tutte le successive richieste non fanno più nessun aggiornamento

Se non c’è pensavo ad un trucchetto semplice.

Dato che ho ridefinito il controller base e tutti i controller estendono quello mio, potrei quando aggiorno la webapplication fare in modo la sovrascrittura inserisca nel controller base il codice che avvia la migrazione ed un secondo controller per dopo la migrazione

Alla prima richiesta dato che il controller base ha il codice della migrazione la esegue e subito dopo sostituisce se stesso con il controller dedicato alle richiesta successive (senza migrazione)… basta che php (www-data) abbia i diritti di scrittura nella webroot

In questo modo si può fare in modo che il controller che fa l’upgrade proponga anche una videata che avvisa della nuova release ed esegua la migrazione dopo la conferma dell’utente.

Per ora non ho avuto l’esigenza di rendere il processo automatico. Mettere in piedi una struttura così mi costerebbe più che fare qualche upload. Sto iniziando uno sprint con scrum dove è prevista anche la configurazione di una macchina per la continuos integration. Spero di saperti dire qualche cosa di più.

Se fai gli update con svn puoi scrivere un hook che fa partire le migration.

In questo caso il trucco e’ di scrivere migration con un nome che richiama le versioni, in modo che passando versione di partenza-arrivo possa fare gli aggiornamenti.

In pratico io preferisco NON aggiornare il dabase di produzione automaticamente, perche’ se si fa qualche cazzata nel codice si butta tutto nel cesso e si fa un nuovo checkout, se zappi in automatico una tabella del database di prodizione devi cercarti un nuovo lavoro…