Изменение физического пути в IIS через appcmd не активировано

9

Мы столкнулись с проблемой в IIS 7.5, где у нас есть простая система развертывания, которая состоит из следующего:

Создайте zip-файл нового webroot, состоящий из трех папок:

Api
Site
Manager

Это распаковывается в новую папку (скажем, мы называем это «SITE_REV1») и содержит скрипт, который вызывает следующее (по одному для каждого корня):

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

Это обычно работает, в 9/10 раз. В некоторых случаях кажется, что веб-корень корректно обновляется (если я проверяю основные параметры в IIS Manager, путь выглядит правильным), но рассматриваемый работающий сайт фактически указывает на старое местоположение. Единственный способ, которым нам удалось «исправить это», - запустить сброс IIS. Недостаточно перезапустить рассматриваемый пул приложений.

Иногда кажется даже необходимым сделать перезагрузку, но я не уверен на 100%, что это точно (не всегда я сам решал проблему).

Я переписал скрипт, используя Powershell и модуль Web-администрирования, надеясь, что в appcmd произошел сбой, но возникает та же проблема.

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

Кто-нибудь испытывал что-то подобное? Кто-нибудь знает, что происходит, и что я могу сделать, чтобы предотвратить эту проблему? Выполнение сброса IIS не очень хороший вариант для нас, потому что это будет влиять на все сайты на сервере каждый раз, когда мы пытаемся внедрить изменения на одном сайте.

РЕДАКТИРОВАТЬ: мы определили, что запуск / остановка сайта (НЕ пул приложений) в IIS Manager устраняет ошибочный физический путь, но если я остановлю сайт с помощью appcmd, изменить физический путь, а затем запустить его, я все еще страдаю от те же проблемы. Я на пустом месте ...

Jishi
источник
1
Для тех случаев, когда это не работает, возможно ли, чтобы запросы были существующими и обслуживались старым пулом приложений через перекрывающиеся ротации ? Не уверен в требованиях к времени безотказной работы вашего сайта, но вы можете попробовать отключить перекрывающуюся ротацию и включить команду перезапуска пула приложений в сценарий развертывания.
Эксплунт
Нет, все последующие запросы обслуживаются от старого webroot, даже перезапуск приложения перезагрузит приложение из старого корня. Сброс IIS - это единственный способ восстановить его. Это как applicationHost.config обновляется (поскольку IIS-менеджер показывает правильный путь), но сам IIS-сервер работает из предыдущей конфигурации ...
jishi
Я не могу найти упоминание об этом в applicationHost.config, поэтому я предполагаю, что по умолчанию "false"?
Джиши
Хорошо, подумал, что если disallowOverlappingRotation = true, то старый пул приложений может не завершить работу из-за долго работающего потока или чего-то еще. Вот почему IIS Reset потребуется для полной очистки. Интересный вопрос - будет любопытно посмотреть, какие ответы появятся.
Эксплунт
Имейте в виду, что перезапуск пула приложений - это не то же самое, что остановка / запуск. Вы пробовали этот метод? Помните, что это уничтожит все текущие соединения и сделает сайт недоступным (ошибка 500) до перезапуска пула приложений.
Джон Гомер

Ответы:

0

Правильно и сразу ли работает изменение физического пути из IIS Manager?

Вы можете попробовать следующую команду. Иными словами, синтаксис должен иметь тот же результат, но, возможно, он работает немного по-другому, заставляя IIS принимать изменения (лучше):

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

Марко Мильтенбург
источник
AFAIK У нас никогда не было никаких проблем, когда мы меняем его вручную в диспетчере IIS, только программно.
Цзиши
0

Рециркуляция пула приложений должна быть достаточной для каждого сайта. Это независимые процессы. Слишком часто статьи и процессы продвигаются с использованием iisreset. Остановка / запуск пула приложений для одного сайта - это вариант? Это решение с одним сервером, и вы пытаетесь минимизировать время простоя сайта? Существует возможность отключить утилизацию при изменении конфигурации. Тогда вы можете вручную переработать. Когда возникает проблема, что указано в applicationHost.config?

Стив Шофилд
источник
Я не уверен на 100%, но поскольку IIS Manager перечисляет новый путь, я предполагаю, что applicationHost.config обновлен. Однако, когда процесс перезагружается, он не использует вновь настроенные значения. Так как это происходит только изредка, трудно своевременно устранить неполадки.
Цзиши