A alteração do caminho físico no IIS por meio do appcmd não está ativada

9

Detectamos um problema no IIS 7.5, em que temos um sistema de implantação simples que consiste no seguinte:

Crie um arquivo zip do novo webroot, composto por três pastas:

Api
Site
Manager

Isso é descompactado em uma nova pasta (digamos que chamamos de "SITE_REV1") e contém um script que chama o seguinte (um para cada raiz da web):

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

Isso geralmente funciona, em 9/10 vezes. Em alguns casos, a raiz da web parece ter sido atualizada corretamente (se eu inspecionar configurações básicas no Gerenciador do IIS, o caminho parece correto), mas o site em execução na verdade está apontado para o local antigo. A única maneira de conseguirmos "consertar" é executando uma redefinição do IIS. Não é suficiente reciclar o pool de aplicativos em questão.

Às vezes, parece até necessário fazer uma reinicialização, mas não tenho 100% de certeza de que seja preciso (nem sempre fui eu quem estava corrigindo o problema).

Reescrevi o script usando o Powershell e o módulo de administração da Web, esperando que houvesse uma falha no appcmd, mas o mesmo problema ocorre.

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

Alguém já experimentou algo assim? Alguém tem alguma idéia do que está acontecendo e o que posso tentar fazer para evitar esse problema? Fazer uma redefinição do IIS não é realmente uma boa opção para nós, porque isso afetaria todos os sites no servidor toda vez que tentamos implantar alterações em um único site.

EDIT: identificamos que uma partida / parada do site (NÃO o pool de aplicativos) no Gerenciador do IIS resolve o caminho físico incorreto, mas se eu parar o site usando appcmd, altere o caminho físico e inicie-o, ainda sofro de os mesmos problemas. Estou em branco ...

jishi
fonte
1
Nos momentos em que não funciona, é possível que as solicitações existam sendo atendidas pelo pool de aplicativos antigo por meio de rotação sobreposta ? Não tenho certeza dos requisitos de tempo de atividade do seu site, mas você pode tentar desativar a rotação sobreposta e incluir um comando de reciclagem de pool de aplicativos no script de implantação.
explunit
Não, todas as solicitações subsequentes são atendidas a partir da raiz antiga da web, mesmo uma reciclagem de aplicativo recarregará a aplicação da raiz antiga. Uma redefinição do IIS é a única maneira que conseguimos restaurá-la. É como o applicationHost.config é atualizado (desde IIS Manager mostra o caminho correto), mas o próprio servidor funciona a partir da configuração anterior ... IIS
jishi
Não consigo encontrar uma menção a isso no applicationHost.config, então suponho que seja o padrão "false"?
jishi
OK, estava pensando se disallowOverlappingRotation = true, o pool de aplicativos antigo pode não estar sendo encerrado devido a um encadeamento de longa duração ou algo assim. É por isso que a redefinição do IIS seria necessária para limpá-la completamente. Pergunta interessante - ficará curioso para ver quais respostas aparecem.
explunit
Lembre-se de que uma reciclagem de pool de aplicativos não é a mesma que parar / iniciar. Você já tentou esse método? Lembre-se de que isso eliminará todas as conexões atuais e deixará o site indisponível (erro 500) até que o pool de aplicativos seja reiniciado.
31813 John Homer

Respostas:

0

Alterar o caminho físico do Gerenciador do IIS funciona corretamente e imediatamente?

Você pode tentar o seguinte comando. Diferentemente, a sintaxe deve ter o mesmo resultado, mas talvez funcione um pouco diferente internamente, fazendo com que o IIS capte as alterações (melhor):

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

Marco Miltenburg
fonte
AFAIK, nunca tivemos nenhum problema ao alterá-lo manualmente no gerenciador do IIS, apenas de forma programática.
jishi
0

Uma reciclagem de pool de aplicativos deve ser suficiente por site. Estes são processos independentes. Com frequência, os artigos e processos promovem o uso do iisreset. Parar / iniciar o pool de aplicativos para um site é uma opção? Essa é uma solução de servidor único e você está tentando minimizar o tempo de inatividade do site? Há uma opção para Desativar reciclagem nas alterações de configuração. Então você pode reciclar manualmente. Quando o problema ocorre, o que está listado no applicationHost.config?

Steve Schofield
fonte
Não tenho 100% de certeza, mas como o Gerenciador do IIS lista o novo caminho, presumo que applicationHost.config esteja atualizado. No entanto, quando o processo é reciclado, ele não parece usar os valores recém-configurados. Como isso acontece apenas ocasionalmente, é difícil solucioná-lo em tempo hábil.
perfil completo