appcmdによるIISの物理パスの変更がアクティブ化されていません


9

IIS 7.5で問題が発生しました。この問題は、以下で構成される単純な展開システムです。

3つのフォルダーで構成される新しいwebrootのzipファイルを作成します。

Api
Site
Manager

これは新しいフォルダ(「SITE_REV1」と呼ぶとします)に解凍され、以下を呼び出すスクリプトが含まれます(各Webrootに1つ):

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

これは通常、9/10回で機能します。場合によっては、webrootは正しく更新されているように見えますが(IISマネージャーで基本設定を調べた場合、パスは正しいように見えます)、問題の実行中のサイトは実際には古い場所を指しています。「修正」に成功した唯一の方法は、IISリセットを実行することです。問題のアプリケーションプールをリサイクルするだけでは不十分です。

場合によっては、再起動が必要であるように見えることもありますが、正確であるかどうかは100%わかりません(問題を解決するのが自分自身であるとは限りません)。

PowerShellとWeb管理モジュールを使用してスクリプトを書き直し、appcmdに不具合があったことを期待しましたが、同じ問題が発生しました。

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

誰かがこのようなことを経験しましたか?誰かが何が起こっているのかについての手がかりはありますか?この問題を防ぐために私が試すことができることは何ですか?IISリセットを実行することは、私たちにとって本当に良いオプションではありません。単一のサイトに変更を展開しようとするたびに、サーバー上のすべてのサイトに影響を与えるからです。

編集:IISマネージャーでの(アプリケーションプールではなく)サイトの開始/停止によってエラーのある物理パスが解決されることを確認しましたが、appcmdを使用してサイトを停止し、物理パスを変更してから開始すると、依然として問題があります同じ問題。私は空白です...


1
それが機能しない場合、リクエストが既存のリクエストであり、重複したローテーションを介して古いアプリプールによって処理されていた可能性はありますか?サイトの稼働時間の要件は不明ですが、重複ローテーションを無効にして、展開スクリプトにアプリプールのリサイクルコマンドを含めることもできます。
explunit 2013

いいえ、以降のすべてのリクエストは古いウェブルートから提供されます。アプリケーションのリサイクルでも、古いルートからアプリケーションがリロードされます。IISのリセットは、復元に成功した唯一の方法です。(IISマネージャーが正しいパスを表示するため)applicationHost.configが更新されるようですが、IISサーバー自体は以前の構成から動作します...
jishi

applicationHost.configでそれについての言及が見つからないため、デフォルトの「false」であると思いますか?
jishi 2013

OK、disallowOverlappingRotation = trueかどうかを考えていた場合、実行時間の長いスレッドなどが原因で、古いアプリプールがシャットダウンしていない可能性があります。これがIISリセットを完全にクリアするために必要になる理由です。興味深い質問-どのような答えが現れるかを知りたいと思います。
explunit 2013

アプリプールのリサイクルは、停止/開始と同じではないことに注意してください。この方法を試しましたか?覚えておいてください。これにより、アプリプールが再起動されるまで、現在のすべての接続が強制終了され、サイトが利用できなくなります(エラー500)。
John Homer

回答:


0

IISマネージャーから物理パスを変更すると、正しく正しく機能しますか?

次のコマンドを試してみてください。構文は異なりますが、同じ結果になるはずですが、内部的にわずかに異なる動作をするため、IISは変更を取得します(優れています)。

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


AFAIKでは、IISマネージャーで手動で変更しても問題はありませんでした。
jishi 2013

0

アプリプールのリサイクルは、サイトごとに十分です。これらは独立したプロセスです。記事やプロセスがiisresetの使用を促進することが多すぎます。1つのサイトのアプリプールを停止/開始することはオプションですか?これは単一サーバーソリューションであり、サイトのダウンタイムを最小限に抑えようとしていますか?構成の変更時にリサイクルを無効にするオプションがあります。その後、手動でリサイクルできます。問題が発生すると、applicationHost.configに何がリストされますか?


100%確信はありませんが、IISマネージャーが新しいパスを一覧表示するので、applicationHost.configが最新であると想定しています。ただし、プロセスがリサイクルするとき、新しく構成された値を使用していないようです。これはたまにしか発生しないため、タイムリーにトラブルシューティングするのは困難です。
jishi 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.