E 'possibile implementare una nuova applicazione .war senza arrestare l'applicazione?
Domanda
Ciao, Sono nuovo di Grails, e mi chiedo sulla distribuzione. Una volta che un .war viene distribuito alla produzione, come posso aggiornare l'applicazione senza tempi di inattività?
Soluzione
Anche se si distribuisce a caldo il file WAR (da non riavviare il server) ci sarà ancora un po 'di tempo di inattività, mentre le ricariche di contesto. Questa non è una cosa Grails in quanto tale, più di una cosa J2EE / servlet.
Come ha detto Dogbert, migliore di mettere su una pagina di manutenzione (usando Apache di fronte a Tomcat è una buona idea) e spegnere il server di applicazione, caricare la nuova guerra poi avviare il server di nuovo.
Altri suggerimenti
Si potrebbe configurazione due istanze di Tomcat con un mod_proxy_balancer
Apache di fronte ad essa, come descritto qui . Per una ridistribuzione della applicazione potrebbe essere applicata una strategia di "aggiornamento rolling" (presupponendo app1 e app2 sono i tuoi due istanze di Tomcat):
- Disattiva Tomcat @ app1 in bilanciatore-manager di Apache
- Ridistribuire applicazione per Tomcat @ app1
- Fare qualche test con app1 e vedere se tutto funziona
- Abilita Tomcat @ app1 in bilanciatore-manager
- Disattiva Tomcat @ app2 in bilanciatore-manager
- Ridistribuire applicazione per Tomcat @ app2
- Abilita Tomcat @ app2 in bilanciatore-manager
E il gioco è fatto. Non hai bisogno di più macchine fisiche o virtuali per farlo - è anche possibile in un unico pacchetto. Se l'aggiornamento dell'applicazione implica modifiche al database, fare attenzione. Quanto sopra potrebbe essere incapsulato esempio in un href="http://grails.org/doc/1.2.x/guide/4.%20The%20Command%20Line.html#4.1%20Creating%20Gant%20Scripts" sceneggiatura rel="noreferrer"> gant , quindi un semplice "graal cluster ridistribuire" fa tutto il necessario. Tale uno script è attualmente sulla mia lista, ma non ho idea di quando questo sarà finito.
Se si utilizza Tomcat, è possibile, con quella che viene chiamata distribuzione parallela:
http://tomcat.apache.org/tomcat- 7.0-doc / config / context.html # Parallel_deployment
È sufficiente nominare i file di guerra con il numero di versione, come descritto nel documento:
- foo ## 42.war
- foo ## 43.war
Una volta che l'applicazione è confezionato come WAR, modifiche ai file di origine non verranno propagate automaticamente come si ottiene utilizzando run-app. In generale credo che in particolare per il codice compilato con il codice che sta effettivamente vivere tutto il tempo, è un po 'rischioso per eseguire aggiornamenti in tempo reale. È possibile far fronte con il glitch distribuzione dispari durante lo sviluppo, ma nella produzione preferirei giocare sul sicuro e vivere con un po 'di tempo di inattività.
Tutto quello che so è che è possibile modificare un file o di un groove .gsp uno e dopo aver salvato le modifiche sono disponibili nel browser, ma se ci sono altri tipi di file che non sono esattamente sicuro di questa funzione.