ปัญหา IIS กับ Drupal - ตัวจัดการอัปเดต: การอัปเดตล้มเหลว! ไดเรกทอรีถูกล็อคโดย php-cgi.exe


9

ฉันมีปัญหาบางอย่างเมื่อใช้ "Update manager" บน GUI บางไดเรกทอรีถูกล็อคphp-cgi.exeและทำให้การแทนที่ไดเรกทอรีเดิมด้วยไดเรกทอรีที่ดาวน์โหลดใหม่ (ซึ่งใหม่กว่า) ไม่สำเร็จ
แต่ฉันต้องพูดถึงว่ามันไม่ได้เป็นปัญหาสิทธิ์เนื่องจากโมดูลสามารถติดตั้งผ่าน"ติดตั้งจาก URL"บน/admin/modules/installและทำงานได้โดยไม่มีปัญหา

ลองมาตัวอย่าง:

  1. หน้าอัปเดตที่พร้อมใช้งาน ( /admin/reports/updates/update):

    การอัพเดทที่มี

    ตอนนี้ฉันตรวจสอบโมดูลSelect (หรืออื่น ๆ )ที่จะอัปเดต ( ไม่สำคัญว่าจะเลือกโมดูลใดผลลัพธ์เหมือนกัน !! ดังนั้นจึงเป็นเพียงตัวอย่าง)

  2. ผมตี"ดาวน์โหลดโปรแกรมปรับปรุงเหล่านี้"ปุ่ม

  3. ตกลงอินสแตนซ์ที่อัปเดตของโมดูลจะถูกดาวน์โหลดโดยไม่มีปัญหา:
    " อัปเดตที่ดาวน์โหลดสำเร็จ ": อัปเดตการดาวน์โหลดสำเร็จแล้ว
  4. ตอนนี้ฉันคลิกที่ดำเนินการต่อ
  5. ข้อผิดพลาดที่นี่มา ผลลัพธ์:
    "การอัปเดตล้มเหลว!ดูบันทึกด้านล่างสำหรับข้อมูลเพิ่มเติม
    select_or_other
    • เกิดข้อผิดพลาดในการติดตั้ง / อัพเดท
    • การถ่ายโอนไฟล์ล้มเหลวเหตุผล: ไม่สามารถคัดลอกไปD:/Projects/web/drupal-7/tmp/update-extraction-6d8993ac/select_or_other/LICENSE.txt /Projects/web/drupal-7/htdocs/sites/all/modules/select_or_other/LICENSE.txt" การอัพเดทล้มเหลว!
  6. ตกลงฉันเริ่มพยายามตรวจสอบสาเหตุที่เป็นไปได้
    • นี่คือสิ่งที่โครงสร้างไดเรกทอรี Drupal โครงสร้างไดเร็กทอรี TCของฉันดูเหมือนว่า: ผมตั้ง../tmpให้เป็นไดเรกทอรีชั่วคราว (ใน/admin/config/media/file-system), ไฟล์ Drupal htdocsอยู่ใน นี่ถูกต้องเพราะฉันสามารถติดตั้งโมดูลผ่าน GUI ดังที่ฉันได้กล่าวไว้ข้างต้น
    • เมื่อฉันพยายามที่จะเข้าสู่htdocs/sites/all/modules/select_or_otherไดเรกทอรีฉันไม่สามารถเพราะฉันได้รับ"การเข้าถึงถูกปฏิเสธในไฟล์......sites/all/modules/select_or_other!" เมื่อเปิดในผู้บัญชาการรวมและ" ...sites/all/modules/select_or_otherไม่สามารถเข้าถึงการเข้าถึงถูกปฏิเสธ."เมื่อเปิดใน Windows Explorer: พยายามเปิดไดเรกทอรีใน Total Commander,พยายามเปิดไดเรกทอรีใน Windows Explorer
    • ตกลงฉันคลิกขวาที่โฟลเดอร์และเปิดUnlockerผ่านผู้ช่วยในเมนูบริบท มันบอกว่าไดเรกทอรีนี้ถูกล็อคโดยphp-cgi.exe: Unlocker - ไดเรกทอรีถูกล็อคโดย php-cgi.exe ฉันคลิกที่ "ปลดล็อกทั้งหมด" และตอนนี้โฟลเดอร์สามารถลบตัวเองphp-cgi.exeได้
    • ฉันสามารถค้นหาไดเรกทอรีของโมดูล select_or_other ที่อัปเดตได้ในtmp: ไดเรกทอรีของโมดูลที่อัปเดตใน <code> tmp </code>
    • ดังนั้นฉันต้องย้ายไปยังsites/all/modulesไดเรกทอรีด้วยตนเอง

สิ่งที่สามารถจะเป็นเหตุผลที่เป็นไปได้ของคุกของไดเรกทอรีโดยphp-cgi.exe? (อาจเป็น Windows Cache Extension 1.1 สำหรับ PHP 5.3 ติดตั้งผ่าน Web Platform Installer หรือไม่ แต่ถ้าใช่ทำไมเป็นเช่นนั้นเช่นการลบรูปภาพหรือคล้ายกันผ่านทาง GUI ทำงานอย่างถูกต้อง)
ฉันต้องทำอย่างไรเพื่อหลีกเลี่ยงปัญหานี้ ผู้จัดการ "ทำงานอย่างไร


ฉันเห็นว่าพฤติกรรมเดียวกันกับ Drupal 7.15 ใน IIS7 / 2008R2 มันคงจะดีถ้าได้แก้ไขสิ่งนี้
Nic

@Nic: ฉันเห็นด้วย! :)
Sk8erPeter

ฉันเห็นสิ่งนี้เป็นระยะ รีเฟรชพูลแอปของคุณปลดล็อคด้วยความอยากรู้ได้หรือไม่
เบรนต์

2
ฉันรู้ว่ามันไม่ใช่หัวข้อ แต่ฉันต้องบอกว่า - หนีออกจาก Drupal บน IIS อย่างที่ฉันเห็นบนหน้าจอคุณอาจจะใช้มันเพื่อการพัฒนาท้องถิ่น ตรวจสอบWAMPหรือAcquia Dev สก์ท็อป หากคุณเพียงแค่ต้องใช้มันบนเซิร์ฟเวอร์ที่ผลิตให้ละเว้นความคิดเห็นของฉัน :) ฉันต้องใช้ IIS สำหรับบางเว็บไซต์และจนถึงตอนนี้ก็ยังไม่ได้รับประสบการณ์ที่ดี
Aram Boyajyan

@Brent: ฉันไม่รู้ หลังจากเรียกใช้เพจใน Drupal ดูเหมือนว่าไฟล์และไดเรกทอรีจะถูกล็อคในช่วงเวลาที่ไม่รู้จัก โดยวิธีการที่ฉันใช้Drushด้วยและเมื่อฉันต้องการปรับปรุงโมดูลที่ใช้drush up -yฉันพบปัญหาเดียวกัน: ฉันต้องปลดล็อกไฟล์และไดเรกทอรีเหล่านี้ด้วยUnlockerเพื่อให้ทำงานได้ไม่เช่นนั้นฉันจะได้รับข้อความแสดงข้อผิดพลาดว่า ไม่สามารถเขียน / ลบไดเรกทอรีได้และกระบวนการอัปเดตจะถูกขัดจังหวะ ถ้าฉันใช้ Unlocker ก่อนที่จะใช้กระบวนการนี้การอัพเดตก็สำเร็จ
Sk8erPeter

คำตอบ:


1

สิ่งนี้ไม่ปลอดภัยที่อนุญาตให้เขียนไฟล์จากส่วนติดต่อผู้ใช้ Drupal สำหรับการอัพเดทโมดูลแทนการใช้ ftp นี้

แต่ถ้าคุณต้องการให้ไปที่แผง plesk ของโฮสติ้งสำรวจไดเรกทอรี httpdocs คลิกขวาและจากนั้นได้รับอนุญาตตอนนี้ได้รับอนุญาตให้สิทธิ์เขียนให้กับผู้ใช้กลุ่มแอพลิเคชัน

ขอบคุณ


0

เหตุผลสำหรับ php-cgi สำหรับการล็อคนั้นเป็นเพราะวิธี "หน้าต่าง" แบบพิเศษที่จัดการกับการเข้าถึงไฟล์และ php / iis จัดการกับ "แคช" โดยทั่วไปคุณเพิ่งสร้างไดเรกทอรีและพยายามเข้าถึง แต่หมายเลขอ้างอิงที่สร้างขึ้นนั้นไม่ได้ถูกปล่อยออกมา (ดังนั้นจึงยังถูกล็อคอยู่) นี่ไม่ใช่ปัญหา drupal มันเป็นปัญหา IIS / PHP และไม่มีวิธีแก้ไขเฉพาะหน้าที่ฉันสามารถหาได้

โดยพื้นฐานแล้วทำตามคำแนะนำพื้นฐานของการไม่ใช้ IIS ที่ดีที่สุดฉันได้เห็นปัญหานี้มากกว่าแค่ drupal กับ IIS ที่ฉันแก้ไขด้วยการย้ายไป apache HTTPD (บน win32) โปรดทราบว่าเป็นเรื่องของการกลับไปโรงเรียนพร้อมกับโครงการที่ฉันต้องใช้ windows 2000

วิธีที่ดีที่สุดที่ฉันรู้ในการรัน drupal บน windows คือผ่าน apache (เนื่องจากการจัดการภายในของ php)


0

แนวคิดบางอย่างที่จะขุดในทิศทางที่ถูกต้อง:

หากคุณมีปัญหาเดียวกันจาก Drush ฉันไม่แน่ใจว่านี่เป็นปัญหา IIS หรือไม่ Drush ไม่เพียงเรียกใช้งาน PHP จากบรรทัดคำสั่งที่ไม่มี IIS ใช่หรือไม่ คุณสามารถลองทำได้โดยหยุด IIS (iisreset / stop) จากนั้นรันคำสั่ง Drush update และฉันคาดว่าคุณจะได้รับผลลัพธ์เดียวกัน

อีกสิ่งหนึ่ง (ขออภัยฉันไม่มีชื่อเสียงพอที่จะแสดงความคิดเห็นโดยตรงกับคำตอบของ Lawri):

"โดยทั่วไปคุณเพิ่งสร้างไดเรกทอรีและพยายามเข้าถึง แต่หมายเลขอ้างอิงที่สร้างขึ้นนั้นไม่ได้เผยแพร่"

นี่เป็นเรื่องจริงหรือ จากโพสต์ต้นฉบับดูเหมือนว่าเขาสร้างโฟลเดอร์ใน "tmp" แต่ล็อคอยู่ในโฟลเดอร์ที่มีอยู่แล้วใน "httpdocs"

ฉันเดาว่า php-cgi พยายามที่จะคัดลอกจาก tmp ไปยัง httpdocs ล้มเหลวด้วยเหตุผลและไม่ได้ปลดล็อค ดังนั้นเมื่อคุณตรวจสอบหลังจากความล้มเหลวคุณจะเห็นล็อคใน httpdocs แต่ฉันคิดว่าเหตุผลเริ่มต้นสำหรับความล้มเหลวไม่ใช่ล็อคอาจเป็นปัญหาสิทธิ์ในโฟลเดอร์ tmp หลังจากทั้งหมด!


หากเป็นกรณีที่เขาไม่สามารถย้าย 'ด้วยมือ' ไดเรกทอรีจะถูกสร้างขึ้นเป็นส่วนหนึ่งของกระบวนการอัพเกรด IIS เกี่ยวข้องกับส่วนต่อประสาน CGI ซึ่งเป็นที่ทราบกันดีว่าก่อให้เกิดข้อผิดพลาดแปลก ๆ และข้อผิดพลาดที่รายงานไม่ได้เป็น "ไม่สามารถเข้าถึง" แต่ "ไม่สามารถคัดลอกไปที่" ข้อผิดพลาด
LvB
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.