การเปลี่ยนเส้นทางกายภาพบน 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 ครั้ง ในบางกรณี webroot ดูเหมือนว่าจะได้รับการปรับปรุงอย่างถูกต้อง (ถ้าฉันตรวจสอบการตั้งค่าพื้นฐานใน IIS Manager เส้นทางดูถูกต้อง) แต่เว็บไซต์ที่กำลังทำงานอยู่นั้นถูกชี้ไปที่ตำแหน่งเดิมจริงๆ วิธีเดียวที่เราจัดการเพื่อ "แก้ไข" คือการเรียกใช้การรีเซ็ต IIS การรีไซเคิลแอปพลิเคชันที่เป็นปัญหาไม่เพียงพอ

บางครั้งดูเหมือนว่าจำเป็นต้องทำการรีบู๊ต แต่ฉันไม่แน่ใจ 100% ว่าถูกต้อง (ไม่ได้เป็นตัวของตัวเองเสมอว่ากำลังแก้ไขปัญหา)

ฉันเขียนสคริปต์ใหม่โดยใช้ Powershell และโมดูล Web-Administration โดยหวังว่าจะมีข้อผิดพลาดใน appcmd แต่เกิดปัญหาเดียวกัน

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

มีใครเคยมีประสบการณ์แบบนี้บ้างไหม? มีใครบ้างที่รู้ว่าเกิดอะไรขึ้นและฉันสามารถลองทำอะไรได้บ้างเพื่อป้องกันปัญหานี้ การรีเซ็ต IIS ไม่ได้เป็นตัวเลือกที่ดีสำหรับเราเพราะมันจะส่งผลต่อทุกไซต์บนเซิร์ฟเวอร์ทุกครั้งที่เราลองและปรับใช้การเปลี่ยนแปลงในไซต์เดียว

แก้ไข: เราได้ระบุว่าการเริ่ม / หยุดของไซต์ (ไม่ใช่กลุ่มแอปพลิเคชัน) ใน IIS Manager จะแก้ไขเส้นทางที่ผิดพลาด แต่ถ้าฉันหยุดไซต์โดยใช้ appcmd ให้เปลี่ยนเส้นทางจริงแล้วเริ่มใหม่ฉันยังคงทุกข์ทรมานจาก ปัญหาเดียวกัน ฉันว่างเปล่า ...


1
สำหรับช่วงเวลาที่มันไม่ทำงานเป็นไปได้หรือไม่ที่คำขอนั้นเป็นคำขอที่มีอยู่ซึ่งให้บริการโดยกลุ่มแอพเก่าผ่านการหมุนที่ทับซ้อนกัน ? ไม่แน่ใจเกี่ยวกับข้อกำหนดสถานะการออนไลน์ในเว็บไซต์ของคุณ แต่คุณสามารถลองปิดใช้งานการหมุนที่ทับซ้อนกันและรวมถึงคำสั่งรีไซเคิลแอพในสคริปต์การปรับใช้ของคุณ
explunit

ไม่ได้คำขอที่ตามมาทั้งหมดจะได้รับจากเว็บรูทเก่าแม้แต่แอปพลิเคชันรีไซเคิลจะโหลดแอปพลิเคชันใหม่จากรูทเก่า การรีเซ็ต IIS เป็นวิธีเดียวที่เราสามารถจัดการกู้คืนได้ มันเหมือนมีการปรับปรุง applicationHost.config (ตั้งแต่ IIS ผู้จัดการแสดงเส้นทางที่ถูกต้อง) แต่ IIS เซิร์ฟเวอร์ตัวเองจากการกำหนดค่าการทำงานก่อนหน้า ...
Jishi

ฉันไม่สามารถพูดถึงมันใน applicationHost.config ดังนั้นฉันคิดว่ามันเป็นค่าเริ่มต้น "false" หรือไม่?
jishi

ตกลงกำลังคิดว่า disallowOverlappingRotation = true แล้วพูลแอพเก่าอาจไม่ปิดตัวลงเนื่องจากเธรดที่รันนานหรืออะไรบางอย่าง ด้วยเหตุนี้จึงจำเป็นต้องใช้ IIS Reset เพื่อล้างข้อมูลอย่างสมบูรณ์ คำถามที่น่าสนใจ - จะอยากรู้อยากเห็นเพื่อดูว่ามีคำตอบใดปรากฏขึ้น
explunit

โปรดจำไว้ว่าการรีไซเคิลแอพพลิเคชั่นนั้นไม่เหมือนกับการหยุด / เริ่ม คุณลองวิธีนี้แล้วหรือยัง โปรดจำไว้ว่าการดำเนินการนี้จะฆ่าการเชื่อมต่อปัจจุบันทั้งหมดและทำให้ไซต์ใช้งานไม่ได้ (ข้อผิดพลาด 500) จนกว่าจะเริ่มแอพพูลใหม่
John Homer

คำตอบ:


0

การเปลี่ยนเส้นทางกายภาพจาก IIS Manager ทำงานอย่างถูกต้องและทันทีหรือไม่

คุณอาจต้องการลองคำสั่งต่อไปนี้ ไวยากรณ์ที่ต่างกันควรมีผลลัพธ์เหมือนกัน แต่อาจใช้งานได้แตกต่างกันเล็กน้อยภายในทำให้ IIS รับการเปลี่ยนแปลง (ดีกว่า):

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


AFAIK เราไม่เคยมีปัญหาใด ๆ เมื่อเราทำการเปลี่ยนแปลงด้วยตนเองในตัวจัดการ IIS โดยทางโปรแกรมเท่านั้น
jishi

0

การรีไซเคิลกลุ่มแอพควรเพียงพอต่อเว็บไซต์พื้นฐาน เหล่านี้เป็นกระบวนการอิสระ บ่อยครั้งที่บทความและกระบวนการโปรโมตโดยใช้ iisreset การหยุด / เริ่มต้นแอพพูลสำหรับไซต์เดียวเป็นตัวเลือกหรือไม่ นี่เป็นโซลูชันเซิร์ฟเวอร์เดียวและคุณพยายามลดเวลาหยุดทำงานของไซต์หรือไม่ มีตัวเลือกให้ปิดใช้งานการรีไซเคิลในการเปลี่ยนแปลงการกำหนดค่า จากนั้นคุณสามารถรีไซเคิลด้วยตนเอง เมื่อปัญหาเกิดขึ้นมีรายการอะไรใน applicationHost.config


ฉันไม่แน่ใจ 100% แต่เนื่องจาก IIS Manager แสดงรายการเส้นทางใหม่ฉันคิดว่า applicationHost.config เป็นรุ่นล่าสุด อย่างไรก็ตามเมื่อกระบวนการนั้นกลับมาใช้ใหม่ดูเหมือนว่าจะไม่ใช้ค่าที่กำหนดใหม่ เนื่องจากสิ่งนี้เกิดขึ้นเป็นครั้งคราวเท่านั้นจึงยากที่จะแก้ไขปัญหาในเวลาที่กำหนด
jishi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.