E 'possibile implementare una nuova applicazione .war senza arrestare l'applicazione?

StackOverflow https://stackoverflow.com/questions/1663757

  •  12-09-2019
  •  | 
  •  

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à?

È stato utile?

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):

  1. Disattiva Tomcat @ app1 in bilanciatore-manager di Apache
  2. Ridistribuire applicazione per Tomcat @ app1
  3. Fare qualche test con app1 e vedere se tutto funziona
  4. Abilita Tomcat @ app1 in bilanciatore-manager
  5. Disattiva Tomcat @ app2 in bilanciatore-manager
  6. Ridistribuire applicazione per Tomcat @ app2
  7. 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top