วิธีจัดการการเปลี่ยนแปลงสกีมาของฐานข้อมูลในการเปิดตัวโครงการโอเพ่นซอร์ส


9

ฉันจัดการโปรแกรมประยุกต์ PHP / MySQL เว็บแบบโอเพนซอร์ซที่ใช้โดยโรงเรียน K-12 และวิทยาลัยบางแห่ง ฉันยังเป็นผู้พัฒนาโครงการเท่านั้น ในขณะที่มันเคยเป็นมากกว่าการดาวน์โหลดต้นฉบับของแอปพลิเคชันที่นายจ้างของฉันโฮสต์ฉันได้ทำงานในช่วงปีที่ผ่านมาเพื่อให้เป็นโครงการโอเพ่นซอร์ส "ของจริง" พร้อมเอกสารประกอบการเผยแพร่หมายเลขการเปลี่ยนแปลงสาธารณะ ฯลฯ

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

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

เชลล์สคริปไม่ค่อยเหมาะสมนักเนื่องจากผู้ใช้ของเราจำนวนมากทำงานบนโฮสต์ที่ไม่มีการเข้าถึงเชลล์ เนื่องจากลำดับความสำคัญอื่น ๆ สคริปต์ติดตั้ง / อัพเกรดที่ใช้เบราว์เซอร์ PHP ที่ซับซ้อนจึงไม่น่าจะเกิดขึ้นได้ อย่างไรก็ตามฉันต้องการทำบางสิ่งกับสคริปต์ PHP ที่ใช้เบราว์เซอร์เพื่อทำให้การอัพเกรดง่ายขึ้น คำแนะนำเกี่ยวกับวิธีการเข้าถึง

คำตอบ:


3

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


ฉันตรวจดูสคริปต์ upgrade.php ของคุณและนั่นเป็นสิ่งที่ฉันคิดไว้ ขอบคุณ
Michael

2

Drupal CMS มีวิธีแก้ไขปัญหาของคุณที่น่าสนใจ ฉันขอแนะนำให้ดูที่ Drupal โดยทั่วไปหากคุณกำลังพัฒนาโซลูชันบนเว็บโดยใช้ PHP เป็น PHP CMS ที่ชื่นชอบและฉันจะลำเอียงมากพอที่จะบอกว่าดีที่สุด ;)

Drupal นำเสนอ wrapper การทำงานร่วมกับฐานข้อมูลที่ค่อนข้างซับซ้อน อนุญาตให้สร้างฐานข้อมูลชนิดที่แท้จริงจากผู้พัฒนาโมดูลดังนั้นคุณจึงไม่สนใจว่าเซิร์ฟเวอร์กำลังรัน PostgreSQL, MySQL ฯลฯ คุณสามารถสร้างอินเทอร์เฟซของคุณเองได้เช่นกัน ทุกโมดูลจะต้องให้ไฟล์ module.install ซึ่งมีและhook_schema ใช้สำหรับการประกาศสกีมาตารางสำหรับโมดูลขณะที่รันโพรซีเดอร์การติดตั้ง สถาปัตยกรรมสนับสนุนความคิดของการปรับปรุงเช่นกันดังนั้นหากผู้ใช้มีการติดตั้งโมดูลอยู่แล้วฮุกการอัพเดทที่ถูกต้องจะถูกเรียกใช้และอนุญาตให้อัปเดตสคีมาตารางได้อย่างง่ายดายhook_installhook_schemahook_install

ลองดู: http://drupal.org/node/146862แม้ว่า Drupal จะไม่เหมาะกับคุณ แต่ฉันมั่นใจว่าคุณสามารถเรียนรู้บางอย่างจากการตัดสินใจทางสถาปัตยกรรมของพวกเขา


0

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

เรายังเก็บสคริปต์การอัปเกรดใด ๆ ไว้ในโฟลเดอร์นี้ ด้วยวิธีนี้เราสามารถย้ายลูกค้าจากรุ่น x เป็นรุ่น y

มันไม่ใช่วิธีที่ดีที่สุด ... แต่มันใช้งานได้สำหรับเรา


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