ฉันพยายามหาตัวอย่างที่ดีเกี่ยวกับวิธีจัดการสกีมาฐานข้อมูลและข้อมูลระหว่างการพัฒนาทดสอบและเซิร์ฟเวอร์ที่ใช้งานจริง
นี่คือการตั้งค่าของเรา นักพัฒนาแต่ละคนมีเครื่องเสมือนที่รันแอพของเราและฐานข้อมูล MySQL เป็นกล่องทรายส่วนตัวของพวกเขาที่จะทำสิ่งที่พวกเขาต้องการ ขณะนี้ผู้พัฒนาจะทำการเปลี่ยนแปลงกับ SQL schema และทำการดัมพ์ของฐานข้อมูลเป็นไฟล์ข้อความที่พวกเขาส่งไปยัง SVN
เราต้องการปรับใช้เซิร์ฟเวอร์การพัฒนาแบบรวมอย่างต่อเนื่องซึ่งจะใช้งานรหัสที่มุ่งมั่นล่าสุดอยู่เสมอ ถ้าเราทำตอนนี้มันจะโหลดฐานข้อมูลจาก SVN สำหรับแต่ละบิลด์
เรามีเซิร์ฟเวอร์ทดสอบ (เสมือน) ที่เรียกใช้ "release candidate" การปรับใช้กับเซิร์ฟเวอร์ทดสอบในปัจจุบันเป็นกระบวนการที่ต้องทำด้วยมือบ่อยครั้งและมักจะเกี่ยวข้องกับฉันในการโหลด SQL ล่าสุดจาก SVN และปรับแต่งมัน นอกจากนี้ข้อมูลบนเซิร์ฟเวอร์ทดสอบไม่สอดคล้องกัน คุณจะจบลงด้วยข้อมูลการทดสอบใด ๆ ที่นักพัฒนาคนสุดท้ายที่ทำไว้กับเซิร์ฟเวอร์ Sandbox ของเขา
จุดที่ทุกสิ่งแยกย่อยคือการปรับใช้กับการผลิต เนื่องจากเราไม่สามารถเขียนทับข้อมูลสดด้วยข้อมูลทดสอบสิ่งนี้เกี่ยวข้องกับการสร้าง schema ทั้งหมดขึ้นใหม่ด้วยตนเอง หากมีการเปลี่ยนแปลงสคีมาจำนวนมากหรือสคริปต์การแปลงเพื่อจัดการข้อมูลสิ่งนี้อาจมีขนดกจริงๆ
หากปัญหาเป็นเพียงสคีมามันจะเป็นปัญหาที่ง่ายกว่า แต่มีข้อมูล "ฐาน" ในฐานข้อมูลที่ได้รับการอัปเดตระหว่างการพัฒนาเช่นเมตาดาต้าในตารางความปลอดภัยและสิทธิ์
นี่เป็นอุปสรรคที่ใหญ่ที่สุดที่ฉันเห็นในการก้าวไปสู่การบูรณาการอย่างต่อเนื่องและการสร้างขั้นตอนเดียว คุณจะแก้ปัญหาได้อย่างไร
คำถามติดตามผล: คุณติดตามรุ่นของฐานข้อมูลอย่างไรเพื่อให้คุณทราบว่าสคริปต์ใดที่จะเรียกใช้เพื่ออัปเกรดอินสแตนซ์ฐานข้อมูลที่กำหนด ตารางเวอร์ชันเช่น Lance ระบุไว้ด้านล่างขั้นตอนมาตรฐานหรือไม่
ขอบคุณสำหรับการอ้างอิงถึง Tarantino ฉันไม่ได้อยู่ในสภาพแวดล้อม. NET แต่ฉันพบว่าหน้าวิกิ DataBaseChangeMangementของพวกเขามีประโยชน์มาก โดยเฉพาะการนำเสนอ Powerpointนี้(.ppt)
ฉันจะเขียนสคริปต์ Python ที่ตรวจสอบชื่อของ*.sql
สคริปต์ในไดเรกทอรีที่กำหนดเทียบกับตารางในฐานข้อมูลและเรียกใช้สคริปต์ที่ไม่ได้อยู่ในลำดับตามจำนวนเต็มซึ่งเป็นส่วนแรกของชื่อไฟล์ ถ้ามันเป็นทางออกที่ง่ายอย่างที่ฉันคิดว่ามันจะเป็นแล้วฉันจะโพสต์ที่นี่
ฉันมีสคริปต์ที่ใช้งานได้สำหรับสิ่งนี้ มันจัดการการเริ่มต้นฐานข้อมูลถ้ามันไม่ได้อยู่และเรียกใช้สคริปต์อัพเกรดตามความจำเป็น นอกจากนี้ยังมีสวิตช์สำหรับเช็ดฐานข้อมูลที่มีอยู่และนำเข้าข้อมูลทดสอบจากไฟล์ มันมีประมาณ 200 บรรทัดดังนั้นฉันจะไม่โพสต์มัน (แม้ว่าฉันจะใส่ไว้ใน pastebin หากมีความสนใจ)