แนวปฏิบัติที่ดีที่สุดในการอัพเกรดแกน Drupal คืออะไรโดยไม่ทำลาย Git repo และเว็บไซต์การผลิต


13

ฉันมีที่เก็บ Git ซึ่งรหัสทั้งหมดของฉันอยู่ในสาขาหลักและก่อนหน้านี้ฉันไม่สนใจไฟล์ Drupal ทั้งหมดดังนั้นฉันจึงแยกการแยกระหว่างรหัสที่ฉันเขียนไว้อย่างเข้มงวด (หรือปรับเปลี่ยนหรืออาจแก้ไข) และรหัส ที่สามารถสร้างขึ้นด้วย Drush หรืออะไรก็ตาม

นี่เป็นกลยุทธ์ที่ดีจนกระทั่งฉันต้องอัพเกรด Drupal ฉันรู้ว่าฉันต้องการที่จะย้อนกลับไปถ้าสิ่งต่าง ๆ แย่ลงและมีเครื่องมืออะไรที่ดีกว่าการใช้ Git ในการทำเช่นนั้น ฉันคิดกับตัวเองว่านี่จะเป็นสถานการณ์ที่สมบูรณ์แบบสำหรับฟีเจอร์สาขาดังนั้นฉันจึงสร้างdrupal-7.14สาขาขึ้นมาเอง.gitignoreเพื่อที่จะเพิกเฉยต่อโค้ดและไฟล์การตั้งค่าทั้งหมดและให้ความสนใจกับไฟล์ที่เป็นส่วนหนึ่งของการติดตั้ง Drupal เท่านั้น อย่าแตะต้อง ฉันทำการอัปเกรดด้วยมือ (ดาวน์โหลด, คลายซิป, ไม่คัดลอก, คัดลอก), เรียงลำดับตามกรณีแนวเขตเช่น robots.txt และ. htaccess และเขียนทับ. gitignore ของ Drupal ด้วยตัวเอง ฉันแก้ไขการตั้งค่าบางอย่างที่ทำงานกับ 7.14 แต่ไม่ใช่กับ 7.15 เพื่อกู้คืนจากข้อผิดพลาด 500 และทุกอย่างก็ดูสมบูรณ์แบบ ฉันเปลี่ยนชื่อสาขาเป็นdrupal-7.15และกำลังจะไปอย่างมีความสุขในแบบของฉัน

จนกว่าฉันจะรู้ว่าสิ่งที่ฉันทำโดยไม่ได้ตั้งใจ: ไฟล์ที่ก่อนหน้านี้ไม่ได้ติดตามโดยสาขาหลักของฉัน แต่ทิ้งไว้ในไดเรกทอรีการทำงานตอนนี้ถูกลบออกจากไดเรกทอรีการทำงานตอนที่ฉันเช็คเอาท์หลักเพราะพวกเขาไม่ใช่ไฟล์ที่ไม่ได้ติดตามอีกต่อไป! D'โอ้!

ถ้าฉันรวมdrupal-7.15สาขากับอาจารย์ฉันจะเสียการแยกรหัส

อาจมีวิธีในการแปลงสาขาเป็น submodule สมมติว่าเป็นไปได้นั่นอาจเป็นกลยุทธ์ที่ดีที่สุด ฉันรู้ว่าก่อนหน้านี้ฉันทำสิ่งนี้ว่า submodules เป็นทางออกที่ "ถูกต้อง" แต่เนื่องจากฉันไม่ได้ตระหนักถึงผลข้างเคียงของการใช้กิ่งไม้สำหรับไฟล์ที่ไม่ได้ติดตามก่อนหน้านี้ฉันจึงตัดสินใจที่จะตัดมุม (นอกจากนี้วิธีการทั้งหมดที่ฉันเคยเห็นในการใช้ submodules กับ Drupal ถือว่าคุณกำลังเริ่มโครงการใหม่และ Drupal จะเป็นสาขาหลักมันไม่เป็นที่พึงปรารถนาสำหรับฉันที่จะทำให้รหัสของคนอื่นเป็นสาขาหลักและฉันมีอยู่แล้ว repo ที่มีสาขาหลักดูเหมือนว่ามันจะซับซ้อนโดยไม่จำเป็นเพียงแค่ทำการอัพเกรด)

อาจมีวิธีแก้ปัญหาอื่นที่ฉันไม่ได้คิด

ฉันจะกู้คืนจากสิ่งนี้ได้ดีที่สุดด้วยข้อเสียที่น้อยที่สุดที่เป็นไปได้อย่างไร

UPDATE : นี่เป็นการพัฒนา (ใน Linux VM บนแล็ปท็อปของฉัน) และยังไม่ได้เริ่มผลิต ตามเวลาที่เราไปผลิตฉันวางแผนที่จะรวบรวมทุกสิ่งไว้ในโมดูลคุณลักษณะ แต่ยังไม่เกิดขึ้น

ปรับปรุง 2 : โมดูลย่อยอาจไม่ทำงาน ตาม Git Pro "Submodules อนุญาตให้คุณเก็บ Git repository เป็นไดเรกทอรีย่อยของ Git repository อื่น" Drupal ไม่มีการแยกที่ดีนัก แทนที่จะเป็นรหัส Drupal ทั้งหมดที่อยู่ในไดเรกทอรีย่อยความสัมพันธ์นั้นมีการย้อนกลับไม่มากก็น้อย แต่ก็ยังไม่มีการแยกที่ชัดเจนเนื่องจากคุณอาจแก้ไข. htaccess และ robots.txt ของคุณดังนั้นรหัสของคุณและ repup Drupal จึงผสมกัน ฉันมองหาวิธีแก้ปัญหาเพื่อแก้ไขปัญหานี้


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

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

เพื่อชี้แจงฉันคิดว่าคำถามเกี่ยวกับ "pratice ที่ดีที่สุดสำหรับการอัพเกรด Drupal" นั้นจะเหมาะสมกว่าเนื่องจากคำถามนี้คือ "ฉันจะแก้ไขข้อผิดพลาดทาง git" ได้อย่างไรซึ่งฉันไม่คิดว่าอยู่ที่นี่ ไม่มีความรู้สึกที่แข็งแกร่งในหัวข้อแม้ว่าดังนั้นฉันจะทิ้งไว้ที่ :)
Letharion

ตกลงพอพอ ปัญหาของแบรนดอนนั้นเป็นเรื่องธรรมดา บางทีฉันควรสร้างคำถามใหม่หรือเขียนคำถามนี้ใหม่ (และย้ายคำถามที่เหลือไปยังคำถามอื่น) วรรค 2-3 แรกเป็นเรื่องธรรมดา คุณสร้าง repo คอมไพล์เป็น 7.x-1.0 และคุณต้องการอัพเกรดเป็น 7.x-1.1 ไฟล์ปัญหาคือ. gitignore, .htaccess และ robot.txt บางครั้งคุณต้องการให้พวกเขาติดตามเพราะพวกเขา modded บางครั้งคุณไม่ต้องการให้พวกเขาติดตามเพราะเพราะพวกเขา modded เมื่อทำการอัพเกรด repo คุณจะสร้างสาขาใหม่ที่ผสานหรือเพียงแค่อัปเดตหลัก @ ข้อเสนอแนะ Letharion?
iStryker

@ Letharion: ฉันคิดว่าจะใส่สิ่งนี้ลงใน StackOverflow เป็นคำถาม Git หรือที่นี่เป็นคำถาม Drupal ถ้าฉันพูดถึงมันทุกคนจะบ่นและบอกว่านี่เป็นเรื่องจริงของ Drupal และฉันคิดว่าพวกเขาพูดถูก แม้ว่า Git อาจเป็นเครื่องมือที่ใช้ในการแก้ไขสถานการณ์ แต่ทิศทางที่ขึ้นอยู่กับความรู้ของ Drupal ผู้ใช้ Drupal ทุกคนใช้ Git (หรือไม่ควรใช้) แต่เพียงเล็กน้อยเท่านั้นที่ผู้ใช้ Git ใช้ Drupal ผู้ที่ตอบคำถามเกี่ยวกับ Git จะไม่เข้าใจภูมิหลังของ Drupal
iconoclast

คำตอบ:


10

ดูเหมือนว่าจากการอภิปรายข้างต้นว่าคำถามของคุณไม่ได้เกี่ยวกับการแก้ไข repo คอมไพล์ของคุณ แต่เกี่ยวกับการบำรุงรักษาเว็บไซต์ Drupal ในคอมไพล์และวิธีการทำงานกับการอัปเดตหลัก

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

โซลูชันที่ฉันใช้คือเก็บรหัสทั้งหมดไว้ในที่เก็บเดียวกันใส่มากที่สุดเท่าที่จะทำได้ในฟีเจอร์หรือการส่งออก / รหัส / การกำหนดค่าอื่น ๆ - core กล่องและ contrib

เมื่อคุณอัปเดตคอร์เริ่มต้นในสภาพแวดล้อมการพัฒนาของคุณ:

  • ตรวจสอบให้แน่ใจว่าไดเรกทอรีทำงานสะอาด
  • ดัมพ์ฐานข้อมูลล่าสุด ( drush sql-dump) ทำการคอมมิตด้วยการถ่ายโอนข้อมูลหรือบันทึกที่ใดที่หนึ่งที่ปลอดภัย
  • อัปเดตคอร์ ( drush up drupal)
  • ยอมรับการเปลี่ยนแปลงทั้งหมด
  • ตรวจสอบไฟล์แพตช์ หากจำเป็นต้องใช้โปรแกรมแก้ไขใด ๆ ให้ปรับใช้และทำสิ่งอื่น
  • เรียกใช้ update.php ถ้าจำเป็น (ทำไปแล้วถ้าคุณใช้ drush สำหรับการอัพเดท)
  • ทดสอบไซต์ dev ของคุณ หากทุกอย่างเรียบร้อยให้กดรหัสเพื่อผลิต ดำเนินการdrush updbเกี่ยวกับการผลิต
  • หากมีปัญหาและคุณจำเป็นต้องย้อนกลับให้เปลี่ยนหรือคืนค่า repo ของคุณ ( git reset --hard HEAD~2ควรทำ) หรือเปลี่ยนทั้งสองอย่างถ้าคุณต้องการเก็บประวัติ แทนที่ฐานข้อมูลของคุณด้วยดัมพ์

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

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


0

จากความคิดเห็นของฉันด้านบนคำถามนี้คุณมีเกี่ยวกับการบำรุงรักษาไฟล์ไซต์ Drupal ด้วย git และวิธีการทำงานกับการอัปเดตหลัก คุณไม่ได้พูดถึงเรื่องการสำรองและอัปเกรดฐานข้อมูล ฉันจะพยายามไม่คัดลอกอะไรจากคำตอบของ goron

ฉันได้สร้างโพสต์บล็อกเกี่ยวกับปัญหานี้ การอัปเกรด Drupal core บนเว็บไซต์ของคุณด้วย Git

วิธีการทางเลือก

  1. เรียกใช้คำสั่ง Drush drush up drupal
  2. ใช้แพตช์ของความแตกต่างระหว่างเวอร์ชัน ดูhttp://drupal.org/node/359234 & http://fuerstnet.de/en/drupal-upgrade-easier

คุณไม่ได้ระบุนี้ แต่ถ้าคุณมีความสนใจในการติดตามการเปลี่ยนแปลงระหว่างรุ่น Drupal ที่ฉันจะทำได้โดยใช้แท็กแทนสาขา เมื่อคุณจะทำกับการปรับรุ่นของคุณมุ่งมั่นที่จะต้นแบบแท็กรหัสของคุณเป็น 7.x.


หากฉันเข้าใจอย่างถูกต้องคุณจะแนะนำให้ฉันเก็บรหัสหลัก Drupal ทั้งหมดในที่เก็บเดียวกัน นี่น่าจะเป็นฉันทามติ ฉันลังเล แต่ฉันอาจต้องยอมแพ้และทำเช่นนั้น
iconoclast

ใช่ทั้งหมดในที่เก็บเดียว ฉันมีโมดูลโปรไฟล์และธีมภายในคลังเก็บหลัก / หลักที่เป็น repos คอมไพล์ของตัวเอง ฉันไม่รู้ว่าวิธีที่ดีที่สุด แต่เป็นวิธีที่ดีที่สุดที่ฉันรู้
iStryker

วิธีนี้ไม่สามารถย้อนกลับได้ เหตุผลของฉันสำหรับลงคะแนน
Andre Baumeier

@ Serpiente: ฉันไม่เห็นว่าทำไมไม่มีวิธีที่จะกลับไปควรมีเหตุผลสำหรับการลงคะแนน หากเป็นวิธีที่ดีที่สุดนั่นก็เพียงพอแล้ว หากคุณไม่คิดว่ามันเป็นวิธีการที่ดีที่สุดโปรดระบุว่าเพราะเหตุใด
iconoclast

@iconoclast เรื่องของระบบการแก้ไขคืออะไรถ้าคุณไม่สามารถย้อนเวลากลับไปได้? เช่นคิดเกี่ยวกับการอัปเดตที่ล้มเหลว - จะกู้คืนได้อย่างไร เวอร์ชันที่จัดส่งของซอฟต์แวร์ "อะไรก็ตาม" ควรมีการอ้างอิงที่ชัดเจนซึ่งรวมถึงโดยเฉพาะแกนหลักของกรอบงาน มิฉะนั้นคุณสามารถปล่อยคอมไพล์แล้วเริ่มทำ FTP rollouts อีกครั้ง แค่ 2 เซ็นต์ของฉัน
Andre Baumeier

0

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

ฉันสิ้นสุดมีไดเรกทอรี git ที่เหมือนกันสองรายการ: อันหนึ่งสำหรับการทำงานกับโค้ดที่กำหนดเองของฉันโดยมีไฟล์หลักอยู่ แต่ถูกละเว้นและฉันจะไม่เปลี่ยนเป็นสาขา "เต็ม" ในไดเรกทอรีนี้ - หนึ่งสำหรับการผสาน ทำการสลับสาขาและรวมภายในไดเรกทอรีนี้เท่านั้น

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.