Unexpected Error in Drupal

วันก่อนอัพเกรด Drupal จากรุ่น 6 เป็นรุ่น 7 เพราะชอบความสามารถของ Drupal 7 หลาย ๆ ส่วน และไม่คิดว่ามันจะมีปัญหาอะไรจุกจิก ผมเชื่อในความสามารถของทีมพัฒนา Drupal ค่อนข้างมาก แต่ผมคิดผิด!

ในช่วงแรก ปัญหาทุกอย่างสามารถแก้ไขได้อยู่เรื่อย ๆ เพราะไม่ใช่เรื่องใหญ่มากนัก (highlight code ไม่ได้นี่เรื่องเล็ก?) แต่พออัพเกรดจาก 7.2 เป็น 7.7 เท่านั้นแหละปัญหาใหญ่เกิดขึ้นทันที

The website encountered an unexpected error. Please try again later.

เมื่อขึ้นข้อความนี้ เหมือนเว็บทั้งเว็บจะใช้การไม่ได้ และแทบจะทำอะไรไม่ได้เลย ลองค้นหาจาก Google ก็ไม่ได้เรื่องได้ความอะไรมากนัก ลองไปลองมาหลายครั้งจนพบว่า มันเป็นที่โฮสต์ และการจัดการไฟล์ของ Drupal เอง เพราะว่าบน localhost นั้นทำงานได้ปกติ ผมอยากจะถอยกลับไปใช้รุ่น 7.2 แต่พอดี ไม่ได้สำรองฐานข้อมูลไว้ (สะเพร่าเอง) เลยต้องหาวิธีแก้ไปเรื่อย ๆ

ผมเช็คข้อมูลอยู่หลายรอบ จนพบว่ามันเกิดปัญหาจากระบบ File System เลยต้องปิดระบบ cache และโมดูลที่เกี่ยวข้องกับการระบบไฟล์ทิ้งไปหมด เลยต้องนำฐานข้อมูลจากเซิฟเวอร์มาใส่ใน localhost แล้วแก้ไขในนี้ก่อนที่จะนำกลับไปใส่ในเซิฟเวอร์อีกรอบ หลังจากนั้นก็ลองผิดลองถูกอยู่อีกหลายรอบ (ตอนนี้ไม่ค่อยกลัวเพราะมีฐานข้อมูลสำรองอยู่แล้ว) จนทำให้มันใช้การได้ชั่วคราว แต่ก็ยังเจอปัญหาเดิม หากเปิดโมดูลที่มีการจัดการไฟล์ ก็จะขึ้น error เดิมอีก

ผมจึงไปค้นหาข้อมูลเพิ่มเติมจาก Drupal.org และพบกระทู้ที่เกี่ยวข้องอยู่คือ

ลองตั้งค่า permission ให้เป็น 777 ดูแล้ว แต่ผลก็ออกมาเหมือนเดิม ไม่สามารถคัดลอกไฟล์ได้เหมือนเดิม

The specified file temporary://file.name could not be copied to public://file.name

พอรวมความรู้ทั้งหมดจากหลาย ๆ โพสต์ที่อ่านมา เลยมานั่งไล่ดูไฟล์ file.inc และพบว่า ปัญหาของผมมันไม่ได้อยู่ที่ upload ไฟล์ไม่ได้ แต่มันอยู่ที่ไม่สามารถคัดลอกไฟล์ได้ต่างหาก และดูเหมือนมันจะไม่รู้จัก temporary:// กับ public:// ผมเลยสั่งให้ฟังชั่นอ่านตำแหน่งไฟล์จริง ๆ แทน โดยการแก้บรรทัด 908 ใน file.inc จาก {syntaxhighlighter brush:php} if (!@copy($source, $destination)) { watchdog('file', 'The specified file %file could not be copied to %destination.', array('%file' => $source, '%destination' => $destination), WATCHDOG_ERROR); return FALSE; } {/syntaxhighlighter} เป็น {syntaxhighlighter brush:php} if (!@copy($real_source, $real_destination)) { watchdog('file', 'The specified file %file could not be copied to %destination.', array('%file' => $source, '%destination' => $destination), WATCHDOG_ERROR); return FALSE; } {/syntaxhighlighter}

ทั้งหมดนี่เพราะ safe_mode = ON ตัวเดียว T-T

Tags:

Add new comment

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
By submitting this form, you accept the Mollom privacy policy.