Zmiana ścieżki fizycznej w IIS przez appcmd nie jest aktywowana

9

Napotkaliśmy problem w IIS 7.5, w którym mamy prosty system wdrażania, który składa się z następujących elementów:

Utwórz plik zip nowego webroota, składający się z trzech folderów:

Api
Site
Manager

Jest on rozpakowywany do nowego folderu (powiedzmy, że nazywamy go „SITE_REV1”) i zawiera skrypt, który wywołuje następujące (jeden dla każdego katalogu głównego):

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

Zwykle działa to 9/10 razy. W niektórych przypadkach webroot wydaje się być poprawnie zaktualizowany (jeśli sprawdzę podstawowe ustawienia w Menedżerze IIS, ścieżka wygląda poprawnie), ale działająca witryna jest w rzeczywistości wskazywana na starą lokalizację. Jedynym sposobem, w jaki udało nam się to „naprawić”, jest uruchomienie resetowania IIS. Nie wystarczy ponownie przetworzyć pulę aplikacji, o której mowa.

Czasami wydaje się nawet konieczne zrestartowanie komputera, ale nie jestem w 100% pewien, że jest dokładny (nie zawsze to ja naprawiałem problem).

Przepisałem skrypt za pomocą Powershell i modułu Web-Administration, mając nadzieję, że w appcmd wystąpiła usterka, ale występuje ten sam problem.

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

Czy ktoś doświadczył czegoś takiego? Czy ktoś ma pojęcie o tym, co się dzieje i co mogę zrobić, aby zapobiec temu problemowi? Wykonanie resetu IIS nie jest dla nas dobrą opcją, ponieważ wpłynęłoby to na wszystkie witryny na serwerze za każdym razem, gdy próbujemy wdrożyć zmiany w jednej witrynie.

EDYCJA: Zidentyfikowaliśmy, że uruchomienie / zatrzymanie witryny (NIE puli aplikacji) w Menedżerze IIS rozwiązuje błędną ścieżkę fizyczną, ale jeśli zatrzymam witrynę za pomocą appcmd, zmienię ścieżkę fizyczną, a następnie ją uruchomię, nadal cierpię z powodu te same problemy. Jestem pusta ...

jishi
źródło
1
Czy w tych czasach, kiedy to nie działa, możliwe jest, że żądania były obsługiwane przez starą pulę aplikacji poprzez nakładanie się rotacji ? Nie jesteś pewien wymagań dotyczących czasu dostępności witryny, ale możesz spróbować wyłączyć nakładanie się rotacji i dołączyć polecenie skryptu odzyskiwania puli aplikacji do skryptu wdrażania.
Explunit
Nie, wszystkie kolejne żądania są obsługiwane ze starego katalogu głównego, nawet recykling aplikacji spowoduje ponowne załadowanie aplikacji ze starego katalogu głównego. Reset IIS to jedyny sposób, w jaki udało nam się go przywrócić. To tak, jakby aplikacja applicationHost.config została zaktualizowana (ponieważ menedżer IIS pokazuje prawidłową ścieżkę), ale sam serwer IIS działa z poprzedniej konfiguracji ...
jishi
Nie mogę znaleźć wzmianki o tym w applicationHost.config, więc zakładam, że jest to domyślne „fałsz”?
jishi
OK, myślałem, jeśli disallowOverlappingRotation = true, to stara pula aplikacji może nie zostać zamknięta z powodu długotrwałego wątku lub czegoś takiego. Dlatego IIS Reset byłby wymagany do pełnego wyczyszczenia. Ciekawe pytanie - ciekawi, jakie odpowiedzi się pojawią.
Explunit
Pamiętaj, że recykling puli aplikacji nie jest tym samym, co stop / start. Próbowałeś tej metody? Pamiętaj, że spowoduje to usunięcie wszystkich bieżących połączeń i sprawi, że witryna będzie niedostępna (błąd 500), dopóki pula aplikacji nie zostanie ponownie uruchomiona.
John Homer,

Odpowiedzi:

0

Czy zmiana ścieżki fizycznej z Menedżera IIS działa poprawnie i natychmiast?

Możesz wypróbować następujące polecenie. Inaczej składnia, powinna mieć ten sam wynik, ale może działa nieco inaczej wewnętrznie, powodując, że IIS wychwytuje zmiany (lepiej):

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

Marco Miltenburg
źródło
AFAIK nigdy nie mieliśmy problemu, kiedy zmieniamy go ręcznie w menedżerze IIS, tylko programowo.
jishi
0

Recykling puli aplikacji powinien być wystarczający dla poszczególnych witryn. Są to niezależne procesy. Zbyt często artykuły i procesy promują używanie iisreset. Czy zatrzymanie / uruchomienie puli aplikacji dla jednej witryny jest opcją? Czy jest to rozwiązanie z jednym serwerem i czy próbujesz zminimalizować czas przestoju witryny? Istnieje opcja Wyłącz recykling przy zmianach konfiguracji. Następnie możesz ręcznie poddać recyklingowi. Kiedy pojawia się problem, co jest wymienione w pliku applicationHost.config?

Steve Schofield
źródło
Nie jestem w 100% pewien, ale ponieważ Menedżer usług IIS wyświetla nową ścieżkę, zakładam, że applicationHost.config jest aktualny. Jednak gdy proces zostanie zregenerowany, wydaje się, że nie używa nowo skonfigurowanych wartości. Ponieważ zdarza się to tylko sporadycznie, trudno jest rozwiązać problem w odpowiednim czasie.
jishi