La modifica del percorso fisico su IIS tramite appcmd non è attivata


9

Abbiamo riscontrato un problema su IIS 7.5 in cui abbiamo un semplice sistema di distribuzione che consiste di quanto segue:

Crea un file zip del nuovo webroot, composto da tre cartelle:

Api
Site
Manager

Questo è decompresso in una nuova cartella (diciamo che lo chiamiamo "SITE_REV1") e contiene uno script che invoca il seguente (uno per ogni webroot):

C:\Windows\system32\inetsrv\appcmd set vdir "www.site.com/" -physicalPath:"SITE_REV1\Site"

Questo di solito funziona, in 9/10 volte. In alcuni casi, il webroot sembra essere aggiornato correttamente (se controllo le impostazioni di base in Gestione IIS, il percorso sembra corretto), ma il sito in esecuzione in questione viene effettivamente puntato alla posizione precedente. L'unico modo in cui siamo riusciti a "risolverlo" è eseguendo un ripristino IIS. Non è sufficiente riciclare il pool di applicazioni in questione.

A volte sembra addirittura necessario effettuare un riavvio, ma non sono sicuro al 100% che sia accurato (non sono sempre stato io stesso a risolvere il problema).

Ho riscritto lo script usando Powershell e il modulo di amministrazione Web, sperando che ci fosse un problema tecnico in appcmd, ma si verifica lo stesso problema.

Set-ItemProperty "IIS:\Sites\www.site.com" -Name physicalPath -Value "SITE_REV1\Site"

Qualcuno ha sperimentato qualcosa del genere? Qualcuno ha idea di cosa sta succedendo e cosa posso provare e fare per prevenire questo problema? Effettuare un ripristino IIS non è davvero una buona opzione per noi, poiché ciò influirebbe su tutti i siti sul server ogni volta che proviamo a distribuire le modifiche su un singolo sito.

EDIT: abbiamo identificato che un avvio / arresto del sito (NON il pool di applicazioni) in Gestione IIS risolve il percorso fisico errato, ma se interrompo il sito utilizzando appcmd, cambio percorso fisico e quindi lo avvio, soffro ancora di gli stessi problemi. Sono in uno spazio vuoto ...


1
Per quei momenti in cui non funziona, è possibile che le richieste esistenti fossero servite dal vecchio pool di app tramite rotazione sovrapposta ? Non sei sicuro dei requisiti di uptime del tuo sito, ma potresti provare a disabilitare la rotazione sovrapposta e includere un comando di riciclo del pool di app nello script di distribuzione.
explunit

No, tutte le richieste successive vengono soddisfatte dal vecchio webroot, anche un riciclo dell'applicazione ricaricherà l'applicazione dal vecchio root. Un ripristino IIS è l'unico modo in cui siamo riusciti a ripristinarlo. È come se applicationHost.config sia aggiornato (poiché il gestore IIS mostra il percorso corretto), ma il server IIS stesso funziona dalla configurazione precedente ...
jishi

Non riesco a trovarne una menzione in applicationHost.config, quindi suppongo sia l'impostazione predefinita "false"?
jishi,

OK, stavo pensando se disallowOverlappingRotation = true, quindi il vecchio pool di app potrebbe non essere chiuso a causa di un thread di lunga durata o qualcosa del genere. Ecco perché sarebbe necessario IIS Reset per cancellarlo completamente. Domanda interessante: sarà curioso di vedere quali risposte vengono visualizzate.
explunit

Tieni presente che il riciclo di un pool di app non equivale a stop / start. Hai provato questo metodo? Tieni presente che ciò eliminerà tutte le connessioni correnti e renderà il sito non disponibile (errore 500) fino al riavvio del pool di app.
John Homer,

Risposte:


0

La modifica del percorso fisico da Gestione IIS funziona correttamente e immediatamente?

Potresti provare il seguente comando. Diversamente la sintassi, dovrebbe avere lo stesso risultato ma forse funziona leggermente diversamente internamente causando IIS per rilevare le modifiche (meglio):

C:\Windows\System32\inetsrv\appcmd.exe set app "www.site.com/" -[path='/'].physicalPath:"SITE_REV1\Site"


AFAIK non abbiamo mai avuto problemi quando lo cambiamo manualmente nel gestore IIS, solo a livello di programmazione.
jishi,

0

Un riciclo del pool di app dovrebbe essere sufficiente per sito. Questi sono processi indipendenti. Troppo spesso articoli e processi promuovono l'utilizzo di iisreset. L'arresto / avvio del pool di app per un sito è un'opzione? Si tratta di una soluzione a server singolo e stai cercando di ridurre al minimo i tempi di inattività del sito? C'è un'opzione per disabilitare il riciclaggio sulle modifiche alla configurazione. Quindi è possibile riciclare manualmente. Quando si verifica il problema, cosa è elencato in applicationHost.config?


Non sono sicuro al 100%, ma poiché IIS Manager elenca il nuovo percorso, presumo che applicationHost.config sia aggiornato. Tuttavia, quando il processo ricicla, non sembra utilizzare i valori appena configurati. Poiché ciò accade solo occasionalmente, è difficile risolverlo in modo tempestivo.
jishi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.