Drupal 7 ถึง 8 Migration - คู่มือวิธีการจัดการกับความท้าทายในการโยกย้าย (พร้อมคำแนะนำ)

เผยแพร่แล้ว: 2020-02-27

การโยกย้าย Drupal 7 ถึง 8 ในใจของคุณ? คุณยังคงใช้งานเว็บไซต์ของคุณบน Drupal 7 (หรือ 6) หรือไม่? ถึงเวลาย้ายไปยัง Drupal 8 แล้ว!

เราได้เขียนไว้อย่างละเอียดว่าทำไมคุณควรย้ายไปยัง Drupal 8 หากคุณยังใช้ Drupal 7 (หรือ 6) แม้ว่าหนึ่งในเหตุผลที่เราโปรดปรานที่สุด (และสำคัญ) ในการย้ายไปยัง Drupal 8 ก็คือ … Drupal 9 กำลังมา! และหากคุณต้องการได้รับประโยชน์จาก Drupal 9 ขอแนะนำให้ย้าย Drupal 7 ไปที่ Drupal 8 ก่อน เราอาจโต้แย้งว่าคุณควรย้ายไปที่ Drupal 8 ในขณะนี้ เพราะไม่มีเวลาเพียงพอเมื่อ Drupal 9 มาถึง (มิถุนายน 2020) และ EOL ของ Drupal 7 (พฤศจิกายน 2021) แต่คุณสามารถอ้างว่าคุณสามารถเลือกใช้ LTS (การสนับสนุนระยะยาว) แทนได้! ยุติธรรมพอ นอกจากการใช้จ่ายเงินมากขึ้นในการติดต่อกับผู้ให้บริการ LTS แล้ว คุณยังสูญเสียผลประโยชน์มากมายที่ Drupal 8 มีให้อีกด้วย บางสิ่งอาจดูยากแต่จำเป็นสำหรับอนาคตที่เข้มแข็งและเรียบง่ายกว่านี้

เมื่อใช้งาน Drupal 8 แล้ว คุณไม่จำเป็นต้อง "โยกย้าย" อีกต่อไป เพียงแค่ "อัปเกรด" ง่ายๆ จาก Drupal 8.9 เป็น 9 จากนั้น 9.9 เป็น 10 และอื่นๆ เท่านั้นที่ทำได้ การโยกย้าย Drupal 7 ถึง Drupal 8 ไม่ใช่เรื่องง่ายและตรงไปตรงมาเสมอไป ฉันยอมรับ. การทำตามขั้นตอนช่วยได้ แต่คุณอาจยังคงเผชิญกับความท้าทายบางอย่างในระหว่างการโยกย้าย โดยเฉพาะอย่างยิ่งหากรูปแบบเนื้อหาของเว็บไซต์ Drupal 7 ของคุณค่อนข้างซับซ้อน มาดูการโยกย้ายทีละขั้นตอนจาก Drupal 7 ไปยัง Drupal 8 พร้อมความท้าทายที่คุณอาจเผชิญ และคำแนะนำของเราเกี่ยวกับวิธีการเอาชนะพวกเขา

Drupal 8 Migrate – สมมติฐานและการเตรียมการ

มิเกล เด เซร์บันเตส นักประพันธ์ชาวสเปนกล่าวว่า “ การเตรียมพร้อมมีชัยไปกว่าครึ่ง ” การโยกย้าย Drupal 8 อาจมีความซับซ้อน แต่ถ้าคุณใช้เวลาเพียงพอในการวางแผนการย้าย ความท้าทายจะไม่ทำให้คุณประหลาดใจ การนำมาตรฐานการพัฒนาที่ทันสมัยของ Drupal 8 มาใช้ เช่น Symfony, Twig, PHP 7 เป็นต้น ได้นำไปสู่การสร้างใหม่อย่างสมบูรณ์ แต่ยังต้องการประสบการณ์ดิจิทัลที่ทรงพลัง แข็งแกร่ง และยืดหยุ่นยิ่งขึ้น ต่อไปนี้เป็นเงื่อนไขเบื้องต้นบางประการที่คุณควรจำไว้ก่อนที่คุณจะเริ่มการย้ายข้อมูล Drupal 7 ถึง 8–

  • อัปเดตเว็บไซต์ Drupal 7 ของคุณเป็นเวอร์ชันล่าสุดที่มีให้ สิ่งนี้จะช่วยในการอัปเกรดอัตโนมัติของโมดูลบางตัวที่มีเส้นทางการอัพเกรด Drupal 8 โดยตรง
  • ตรวจสอบให้แน่ใจว่าคุณมีสิทธิ์เข้าถึงฐานข้อมูลและไฟล์ของเว็บไซต์ Drupal 7 (สาธารณะและส่วนตัว)
  • สร้างข้อมูลสำรองของเว็บไซต์ Drupal 7 และใช้ข้อมูลสำรองนี้สำหรับการโยกย้าย Drupal 8 ไม่แนะนำให้โยกย้ายเว็บไซต์ที่ใช้งานได้จริง แม้ว่าการโยกย้ายนั้นไม่ได้ทำการแก้ไขใดๆ กับแหล่งที่มา
  • ดาวน์โหลดการติดตั้ง Drupal 8 ใหม่จากที่นี่ และเปิดใช้งานโมดูล Migrate หลักที่เรากล่าวถึงข้างต้น และจำไว้ว่ามันต้องสดใหม่! การกำหนดค่าหรือเนื้อหาที่สร้างขึ้นจะถูกเขียนทับเมื่อทำการอัปเกรด Drupal 8
  • ไม่มีเส้นทางการอัพเกรดโดยตรงจาก Drupal 7 ถึง Drupal 8 (ต่างจากการอัพเกรดเวอร์ชันก่อนหน้า) ทำความคุ้นเคยกับระบบการย้ายข้อมูลของ Drupal 8 สามโมดูลที่อยู่ในคอร์ –โมดูล Drupal 8 Migrate , โมดูล Drupal 8 Migrate Drupal และโมดูล Drupal 8 Migrate Drupal UI
  • เลือกการย้ายข้อมูลของคุณ – คุณจะใช้ Drush (ซึ่งให้การควบคุมแบบละเอียด) หรือคุณจะใช้อินเทอร์เฟซผู้ใช้เบราว์เซอร์ (ง่ายกว่าแต่ควบคุมน้อยลง)
  • รู้ที่มาของคุณ ความยืดหยุ่นของระบบการโยกย้ายเนื้อหา Drupal ช่วยให้สามารถดึงและโหลดเนื้อหาจาก Drupal เวอร์ชันเก่าและแหล่งอื่นๆ เช่น CSV, XML, JSON, MYSQL เป็นต้น
  • เพื่อการโยกย้ายเนื้อหา Drupal ที่ราบรื่น ให้ดำเนินการตรวจสอบเนื้อหาอย่างละเอียดเพื่อระบุเนื้อหาที่คุณต้องการย้าย ทิ้งเนื้อหาที่ไม่ได้ใช้และไม่เกี่ยวข้องเพื่อหลีกเลี่ยงการใช้เวลาและความพยายามในการย้ายข้อมูล

กระบวนการย้ายข้อมูล Drupal 7 ถึง 8 (ทีละขั้นตอน)

  • สังเกตและวางแผน

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

  • สร้างรายการตรวจสอบโมดูลของเว็บไซต์ Drupal 7 ของคุณ

ด้วยรายการตรวจสอบนี้ คุณจะสามารถระบุโมดูลที่คุณยังคงต้องการได้ หรือมีโมดูลรุ่น Drupal 8 หรือไม่ หรือหากโมดูลได้ย้ายไปที่ Drupal 8 Core แล้ว (เช่น โมดูลสื่อ) ไม่ใช่ทุกโมดูลของ Drupal 7 ที่สามารถย้ายไปยัง Drupal 8 โดยอัตโนมัติได้ โมดูล Drupal 7 บางโมดูลอาจรวมฟังก์ชันการทำงานของพวกเขาไว้ในโมดูล Drupal 8 เดียว และโมดูล Drupal 7 บางตัวอาจแยกคุณลักษณะออกเป็นโมดูล Drupal 8 สองโมดูลขึ้นไป จะดีกว่าเสมอที่จะวิเคราะห์กรณีดังกล่าวเพื่อให้แน่ใจว่าไม่มีข้อมูลสูญหาย!

คำแนะนำจากผู้เชี่ยวชาญ – ใช้โมดูล เช่น Drupal Migrate UI เพื่อระบุโมดูล Drupal 7 และโมดูล Drupal 8 ที่เกี่ยวข้อง (ถ้ามีหรือไม่)

drupal-7-to-8-migration

คำแนะนำแบบมืออาชีพ - ไม่มีเวอร์ชันโมดูลสำหรับ Drupal 8? ตัวอย่างเช่น โมดูล ImageField ใน Drupal 7 ไม่มีโมดูล D8 ที่สอดคล้องกัน เราอาจต้องหาทางเลือกที่เหมาะสมที่สุดสำหรับสิ่งนี้ใน Drupal 8 แน่นอนว่าเรามีโมดูลสื่อหลักของ Drupal 8 อย่างไรก็ตาม เราจะต้องพัฒนาสคริปต์ที่กำหนดเองเพื่อย้ายข้อมูลภาพ ย้ายข้อมูลภาพ

คำแนะนำจากผู้เชี่ยวชาญ – หากคุณเพิ่งสืบทอดเว็บไซต์ D7 และไม่รู้เกี่ยวกับการปรับแต่งที่ทำกับโมดูล หรือ หากคุณได้ปรับแต่งเองและจำเป็นต้องค้นหา เราขอแนะนำให้คุณใช้ Hacked! โมดูล. โมดูลนี้จะผ่านรายการของโมดูลที่มีอยู่ในไซต์และการเปลี่ยนแปลง/การปรับแต่งที่ทำกับแต่ละโมดูล

  • ทำซ้ำและสร้าง
    ทำซ้ำประเภทเนื้อหา การจัดหมวดหมู่ และเอนทิตีทั้งหมดที่จำเป็นในอินสแตนซ์ D8 ของคุณ ต้องสร้างมุมมองด้วยตนเองเมื่อคุณสร้างและจำลองเนื้อหาแล้ว

คำแนะนำจากผู้เชี่ยวชาญ –

  1. ไฟล์เทมเพลต (.tpl) ใน Drupal 7 ควรเขียนใหม่โดยใช้ไฟล์ทวิ ซึ่งเป็นส่วนหนึ่งของเฟรมเวิร์กซิมโฟนี 2
  2. ตรวจสอบให้แน่ใจว่าคุณเขียนโมดูลแบบกำหนดเองของคุณใหม่ซึ่งเป็นไปตามมาตรฐานของซิมโฟนี
  • การใช้ Drupal 7 ถึง 8 Migration

ขั้นตอนที่รอคอยและสำคัญที่สุดมาถึงแล้ว ตามที่กล่าวไว้ก่อนหน้านี้ มีสองวิธีในการย้ายข้อมูล Drupal 7 ของคุณไปยัง Drupal 8 -

  1. เรียกใช้การย้ายข้อมูลด้วย Drupal UI
  2. ดำเนินการย้ายข้อมูลด้วย Drush

แนะนำให้ใช้อย่างหลังเนื่องจากมีประสิทธิภาพมากกว่า สามารถรวมเข้ากับเชลล์สคริปต์ได้ และมีข้อความแสดงข้อผิดพลาดที่ชัดเจนขึ้น

วิธี Drupal UI

ใช้ประโยชน์จากโมดูล Migrate UI Drupal 8 คุณสามารถเริ่มต้นด้วยการไปที่ /upgrade เส้นทางของเว็บไซต์ Drupal 8 หน้าตรวจสอบการอัปเกรด Drupal 8 จะแสดงรายการโมดูลในไซต์ Drupal 7 ของคุณ ซึ่งสามารถและไม่สามารถย้ายไปยัง Drupal 8 ได้โดยอัตโนมัติ สำหรับโมดูลที่มีฟังก์ชันการทำงานในโมดูล D8 อื่น แต่ไม่เหมือนกันทุกประการ (เช่น โมดูล AddressField ใน ตอนนี้ D7 เป็นโมดูลที่อยู่ใน D8) คุณจะต้องติดตั้งและเปิดใช้งานโมดูล D8 ที่เกี่ยวข้อง และรีสตาร์ทกระบวนการย้าย Drupal 7 ถึง 8 ตามแคตตาล็อกของเนื้อหาและข้อมูลที่ดึงออกมา คุณต้องสร้างสคริปต์การโยกย้ายโดยที่คุณแมปแอตทริบิวต์ประเภทเนื้อหาของ Drupal 7 กับแอตทริบิวต์ประเภทเนื้อหาที่สร้างขึ้นใหม่ของ Drupal 8 จากนั้น คุณสามารถดำเนินการนำเข้าข้อมูลจาก แหล่งข้อมูล.

วิธีดรัช

คุณสะดวกที่จะใช้เทอร์มินัลหรือไม่ ถ้าใช่ คุณควรเลือกใช้วิธี Drush สำหรับการโยกย้าย Drupal 7 ถึง 8 มีชุดคำสั่งสำหรับกระบวนการย้ายข้อมูลพร้อมข้อความสถานะที่ดีขึ้น ดูบทช่วยสอนนี้หากคุณกำลังมองหาการโยกย้ายตามขั้นตอนทีละขั้นตอนโดยใช้คำสั่ง Drush ไม่เคยใช้ Drush มาก่อน? คู่มือนี้จะช่วยให้คุณเข้าใจพื้นฐานของ Drush พร้อมรายการคำสั่งที่มีประโยชน์สำหรับการย้ายข้อมูล

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

คำแนะนำจากผู้เชี่ยวชาญ – เดี๋ยวก่อน! เมื่อคุณสร้างเนื้อหาแล้ว อย่ามองข้าม SEO/การดูหน้าเว็บ เราต้องการให้เนื้อหามีเส้นทาง URL เดียวกัน อย่าลืมดูแลการย้ายชื่อแทน URL ข้อมูลเมตาแท็กของเนื้อหาจากไซต์ Drupal 7 เก่า

  • การทดสอบ

มีบางครั้งที่หายากมากที่คุณจะพบปัญหาเป็นศูนย์ในระหว่างการโยกย้าย Drupal 7 ไปยัง Drupal 8 เมื่อการโยกย้ายเสร็จสิ้น การทดสอบการถดถอยของการกำหนดค่าและเนื้อหาที่นำเข้าใหม่เพื่อระบุจุดบกพร่องหรือปัญหาที่อาจเกิดขึ้นเป็นสิ่งที่จำเป็นอย่างยิ่ง

ความท้าทายและ (ผู้เชี่ยวชาญมากขึ้น) คำแนะนำ

  • โมดูลที่สนับสนุน Drupal 7 จำนวนมากมีเวอร์ชันที่ดีกว่าของตัวเองใน Drupal 8 และบางส่วนเลิกใช้แล้ว ตัวอย่างเช่น โมดูล Field Collection ซึ่งใช้สำหรับการจัดกลุ่มฟิลด์ใน Drupal 7 จะเลิกใช้ในไม่ช้า มีการเพิ่มฟังก์ชันการทำงานของโมดูลนี้ในโมดูลย่อหน้าและโมดูลการแก้ไขการอ้างอิงเอนทิตีใน Drupal 8 โมดูล Drupal 8 Paragraphs ให้ความยืดหยุ่นอย่างมากแก่ผู้แก้ไข/ผู้เขียนเนื้อหาเพื่อสร้างรูปแบบและโครงสร้างที่ราบรื่น หากคุณต้องการย้ายโมดูล Field Collection และจับคู่กับโมดูลย่อหน้า (D8) คุณจะต้องเขียนปลั๊กอินที่กำหนดเองเพื่อจับคู่เนื้อหาระหว่างฟิลด์คอลเลกชันฟิลด์กับฟิลด์ย่อหน้า หรือหากคุณยังคงต้องการย้ายโมดูล Field Collection ต่อไปแม้ใน Drupal 8 การแมปฟิลด์นี้สามารถจัดการได้ด้วยปลั๊กอิน Core migrate ที่มีอยู่
  • คุณใช้แผงเพื่อสร้างหน้า Landing Page เช่น หน้าแรก แดชบอร์ด ฯลฯ หรือไม่? แม้ว่าคุณจะต้องวางบล็อกในหน้าแรกเท่านั้น? สร้างเค้าโครงเพื่อช่วยเหลือ! Layout Builder ใน Drupal 8 ทำให้ตัวแก้ไขเนื้อหาปรับแต่งหน้า Landing Page ได้ง่ายขึ้น มาใช้คุณลักษณะของ Drupal 8 ให้เกิดประโยชน์สูงสุด ในการย้ายจากพาเนลไปยังตัวสร้างเลย์เอาต์ คุณจะต้องเขียนปลั๊กอินการโยกย้ายแบบกำหนดเองบางตัว
  • ขณะย้ายข้อมูลผู้ใช้ เราจะต้องรักษารหัสผ่านไว้ด้วย เพื่อที่ผู้ใช้จะได้ไม่ต้องสร้างรหัสผ่านใหม่บนไซต์ใหม่ รหัสผ่านเป็นเนื้อหาที่แฮช ดังนั้น คุณต้องค้นหาอัลกอริทึมประเภทแฮชที่ใช้ในไซต์ต้นทาง ถัดไป. เขียนกระบวนการเพื่อตรวจสอบความถูกต้องของรหัสผ่านที่ย้ายข้อมูลด้วยรหัสผ่านที่แฮชใหม่โดยใช้อัลกอริธึมเดียวกัน
  • เมื่อเรียกใช้การโยกย้าย Drupal 7 ถึง 8 คุณอาจใช้ทรัพยากรระบบของคุณจนหมดซึ่งอาจทำให้การย้ายของคุณหยุดลง ต้องขอบคุณ highwater คุณสามารถเรียกใช้การโยกย้ายอีกครั้งและควรดำเนินการต่อจากที่ค้างไว้
  • โมดูลฟีเจอร์ที่ใช้กันอย่างแพร่หลายใน Drupal 7 เกือบจะล้าสมัยไปแล้วหลังจากการจัดการการกำหนดค่าเข้าแทนที่ฟังก์ชันฟีเจอร์ทั้งหมดและอื่น ๆ ใน Drupal 8 แม้ว่าโมดูลฟีเจอร์จะพร้อมใช้งานใน Drupal 8 เช่นกัน ขอแนะนำอย่างยิ่งให้ใช้ประโยชน์จากการกำหนดค่าของ Drupal 8 ระบบการจัดการ. ไม่เพียงแต่จะใช้งานได้ง่ายกว่าเท่านั้น แต่ยังส่งออกระหว่างสภาพแวดล้อมได้ง่ายโดยใช้รูปแบบไฟล์ YAML แทน PHP ซึ่งเป็นรูปแบบข้อมูลที่อ่านง่ายและเหมาะสมกว่า
  • หากคุณมีเว็บไซต์หลายภาษาของ Drupal 7 (หรือ 6) คุณสามารถใช้ประโยชน์จากโมดูล Migrate Drupal Multilingual ได้ แม้ว่าโมดูลหลายภาษาของ Migrate Drupal จะยังอยู่ในขั้นตอนการทดลอง แต่ก็เป็นโมดูลที่ต้องมีสำหรับไซต์ Drupal แบบหลายภาษาทั้งหมด
  • ประสบปัญหากับการโยกย้าย Drupal 7 ถึง Drupal 8 หรือไม่? มีหลายวิธีในการรายงานความล้มเหลวและรับความช่วยเหลือ -

- คิวปัญหาการอัพเกรด Drupal 8

- คิวปัญหาของโมดูล หากคุณพบข้อผิดพลาดหรือข้อยกเว้นกับโมดูลหลัก/ที่สนับสนุน

- ช่อง #drupal-migrate IRC บน Freenode

- ช่อง #migration บน Drupal Slack

- จ้าง Drupal Expert