Mengubah jalur fisik pada IIS melalui appcmd tidak diaktifkan

9

Kami telah menemukan masalah pada IIS 7.5 di mana kami memiliki sistem penyebaran sederhana yang terdiri dari yang berikut:

Buat file zip webroot baru, yang terdiri dari tiga folder:

Api
Site
Manager

Ini membuka ritsleting ke folder baru (katakanlah kita menyebutnya "SITE_REV1"), dan berisi skrip yang memanggil yang berikut (satu untuk setiap webroot):

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

Ini biasanya berhasil, dalam 9/10 kali. Dalam beberapa kasus, webroot tampaknya diperbarui dengan benar (jika saya memeriksa pengaturan dasar di IIS Manager, jalurnya terlihat benar), tetapi situs yang sedang berjalan sebenarnya menunjuk ke lokasi lama. Satu-satunya cara kami berhasil "memperbaikinya", adalah dengan menjalankan IIS-reset. Tidak cukup untuk mendaur ulang kumpulan aplikasi yang dimaksud.

Kadang-kadang tampaknya bahkan perlu untuk membuat reboot, tapi saya tidak 100% yakin itu akurat (tidak selalu saya sendiri yang memperbaiki masalah).

Saya menulis ulang skrip menggunakan Powershell dan modul Web-Administration, berharap ada kesalahan di appcmd, tetapi masalah yang sama terjadi.

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

Adakah yang mengalami hal seperti ini? Adakah yang tahu apa yang sedang terjadi, dan apa yang bisa saya coba lakukan untuk mencegah masalah ini? Melakukan reset IIS sebenarnya bukan pilihan yang baik bagi kami, karena itu akan memengaruhi semua situs di server setiap kali kami mencoba dan menyebarkan perubahan di satu situs.

EDIT: Kami telah mengidentifikasi bahwa memulai / menghentikan situs (BUKAN kumpulan aplikasi) di IIS Manager menyelesaikan jalur fisik yang salah, tetapi jika saya menghentikan situs menggunakan appcmd, mengubah jalur fisik, dan kemudian memulainya, saya masih menderita karena masalah yang sama. Saya kosong ...

jishi
sumber
1
Untuk saat-saat ketika itu tidak berfungsi, apakah mungkin bahwa permintaan yang sudah ada dilayani oleh kumpulan aplikasi lama melalui rotasi yang tumpang tindih ? Tidak yakin dengan persyaratan uptime situs Anda, tetapi Anda bisa mencoba menonaktifkan rotasi yang tumpang tindih dan termasuk perintah daur ulang kumpulan aplikasi dalam skrip penerapan Anda.
Explunit
Tidak, semua permintaan berikutnya dilayani dari webroot lama, bahkan aplikasi daur ulang akan memuat ulang aplikasi dari root lama. Reset IIS adalah satu-satunya cara kami berhasil mengembalikannya. Ini seperti applicationHost.config diperbarui (karena manajer IIS menunjukkan jalur yang benar), tetapi server IIS itu sendiri bekerja dari konfigurasi sebelumnya ...
jishi
Saya tidak dapat menemukan menyebutkannya di applicationHost.config, jadi saya menganggap itu default "false"?
jishi
OK, sedang berpikir jika disallowOverlappingRotation = true, maka kumpulan aplikasi lama mungkin tidak dimatikan karena utas berjalan lama atau sesuatu. Itulah sebabnya IIS Reset diperlukan untuk menghapusnya sepenuhnya. Pertanyaan menarik - akan penasaran untuk melihat jawaban apa yang muncul.
Explunit
Ingatlah daur ulang kumpulan aplikasi tidak sama dengan berhenti / mulai. Sudahkah Anda mencoba metode ini? Ingat, ini akan mematikan semua koneksi saat ini dan membuat situs tidak tersedia (kesalahan 500) hingga kumpulan aplikasi dimulai kembali.
John Homer

Jawaban:

0

Apakah mengubah jalur fisik dari IIS Manager berfungsi dengan benar dan segera?

Anda mungkin ingin mencoba perintah berikut. Sintaks yang berbeda, harus memiliki hasil yang sama tetapi mungkin bekerja sedikit berbeda secara internal yang menyebabkan IIS untuk mengambil perubahan (lebih baik):

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

Marco Miltenburg
sumber
AFAIK kita tidak pernah memiliki masalah ketika kita mengubahnya secara manual di manajer IIS, hanya secara terprogram.
jishi
0

Daur ulang kumpulan aplikasi harus mencukupi per basis situs. Ini adalah proses independen. Terlalu sering artikel dan proses mempromosikan menggunakan iisreset. Apakah menghentikan / memulai kumpulan aplikasi untuk satu situs merupakan opsi? Apakah ini solusi server tunggal dan Anda mencoba meminimalkan waktu henti untuk situs ini? Ada opsi untuk Nonaktifkan daur ulang pada perubahan konfigurasi. Kemudian Anda dapat mendaur ulang secara manual. Ketika masalah terjadi, apa yang terdaftar di applicationHost.config?

Steve Schofield
sumber
Saya tidak 100% yakin, tetapi karena IIS Manager mencantumkan jalur baru, saya berasumsi bahwa applicationHost.config sudah terbaru. Namun, ketika proses daur ulang, sepertinya tidak menggunakan nilai yang baru dikonfigurasi. Karena ini hanya terjadi sesekali, sulit untuk memecahkannya tepat waktu.
jishi