ความจริงก็คือสิ่งที่เราต้องการคือ: http://www.liquibase.org/
Liquibase เป็นโอเพ่นซอร์ส (Apache 2.0 Licensed), ไลบรารีที่ไม่ขึ้นกับฐานข้อมูลสำหรับการติดตาม, จัดการและใช้การเปลี่ยนแปลงฐานข้อมูล มันถูกสร้างขึ้นบนสมมติฐานง่าย ๆ : การเปลี่ยนแปลงฐานข้อมูลทั้งหมดจะถูกเก็บไว้ในรูปแบบที่มนุษย์สามารถอ่านได้และติดตามได้และตรวจสอบในการควบคุมแหล่งที่มา
อย่างไรก็ตามกระบวนการพัฒนาของเราไม่รองรับ โดยทั่วไปเราจะไม่แก้ไขฐานข้อมูลผ่านสคริปต์ที่ไม่ต่อเนื่องที่เราเขียนเองเราใช้ปลั๊กอินที่เราเปิดใช้งาน เราไม่ได้เขียนสคริปต์ DML เพื่อแก้ไขข้อมูลการค้นหาที่เราตรวจสอบในการควบคุมซอร์สโค้ดเราใช้ UI บนหน้าผู้ดูแลระบบและดังนั้นจึงไม่มีซอร์สโค้ดสำหรับใช้ในการจำลองการเปลี่ยนแปลงนั้นในภายหลังในระหว่างการโยกย้าย
อย่างไรก็ตามเราสามารถเลียนแบบบางส่วนโดยใช้เครื่องมือบางอย่างที่ระบุไว้ในหน้านี้:
/programming//q/225772/149060
ตัวอย่างเช่น liquidbase มีคุณลักษณะต่าง ๆ ที่อาจรวมถึงการเปลี่ยนแปลงข้อมูล เราสามารถส่งออกสคีมาและข้อมูลไปยังสคริปต์ได้ยกเว้นบางตารางที่มีแนวโน้มที่จะรวมข้อมูลทดสอบ (เช่นโพสต์และอื่น ๆ ) จากนั้นนำสคริปต์ไปใช้กับฐานข้อมูลการผลิต
MySQLDiff (พูดถึงคำถาม StackOverflow) ทำ schema diffs และผู้เขียนแนะนำให้mysql_coldiffสำหรับข้อมูลตารางที่ชาญฉลาด diffs - ทั้งสองถูกนำมาใช้ใน Perl ถ้าเครื่องมือ java (liquidbase) ทรัพยากรหนักเกินไปสำหรับเซิร์ฟเวอร์ของคุณ - แม้ว่าจะนำทั้งฐานข้อมูลท้องถิ่น และเรียกใช้เครื่องมือบนพีซีของคุณแก้ปัญหานั้น ...
หากเราต้องการทำอย่างถูกต้องเราควรบันทึก sql ใด ๆ ที่เกี่ยวข้องกับการตั้งค่าตัวเลือกหรือการเปลี่ยนแปลงการกำหนดค่าอื่น ๆ และการเปลี่ยนแปลง schema - และแปลงรหัสบันทึกเป็นสคริปต์การโยกย้ายเพื่อเล่นกับเซิร์ฟเวอร์การผลิตของเรา เล่นสคริปต์การโยกย้ายกับเซิร์ฟเวอร์คัดลอกไฟล์ไซต์ wordpress (ไม่รวมการอัปโหลดหากมี) และเราเป็นทองคำ
ดังนั้นสำหรับฉันแล้ววิธีที่ดีที่สุดก็คือ Migration-builder-plugin ของผู้พัฒนาที่ดักจับ sql ที่เราต้องการเก็บไว้แล้วสร้างสคริปต์การโยกย้ายจากรหัสที่บันทึกไว้แทนที่จะสร้างวิธีผสานฐานข้อมูล ระหว่างการจัดเตรียมและการผลิต ดูเหมือนว่าจะง่ายกว่าในการแก้ปัญหาเช่นกัน
หากเราดูรหัสของเบ็ดตีบของ @bueltge เรียกใช้ปลั๊กอินเพื่อหาแรงบันดาลใจ: https://gist.github.com/1000143 (ขอบคุณ Ron Rennick ผ่าน G + เพื่อชี้ให้ฉันไปในทิศทางของ SAVEQUERIES และ hook shutdown นั่น พาฉันไปหามัน)
- แก้ไขเพื่อให้ได้ผลลัพธ์ SAVEQUERIES แทน
- ทำงานเฉพาะในขณะที่อยู่ในผู้ดูแลระบบ
- กรองการเลือกทั้งหมด
- บันทึกผลลัพธ์ลงในตารางใน hook การปิด
- เราสามารถเลือกสลับการดักจับผลลัพธ์ตามที่เรากำลังทำอยู่ในขณะนี้
ตัวอย่างเช่น:
ชื่อการจับภาพ: เปิดใช้งานและกำหนดค่าปลั๊กอิน XYZ
จับสถานะสลับ - เปิด
... ติดตั้งและกำหนดค่าปลั๊กอิน XYZ
สลับสถานะการจับ - ปิด
ส่งออกสคริปต์การย้ายข้อมูลสำหรับ: เปิดใช้งานและกำหนดค่าปลั๊กอิน XYZ
กดปุ่มส่งออก - เพื่อสร้างฟิลด์ข้อความป๊อปอัพด้วย SQL ที่ติดกับตัวกรองซึ่งได้รับการจัดรูปแบบไว้ล่วงหน้าเป็นเชลล์สคริปต์ที่มีการเรียกใช้บรรทัดคำสั่งไปยัง mysql คัดลอกและวางลงในโฟลเดอร์รหัสการโยกย้ายของคุณและเพิ่มไปยังที่เก็บซอร์สโค้ดของคุณ
ความสนใจอย่างระมัดระวังในการสลับเปิดและปิดการจับภาพในขณะที่คุณกำลังทำงานและคุณจะสามารถสร้างสคริปต์การโยกย้ายที่สมบูรณ์แบบเพื่อใช้ฐานข้อมูลการผลิตของคุณไปยังการกำหนดค่าที่เทียบเท่ากับฐานข้อมูลการแสดงละครของคุณ
สิ่งที่ดีกว่าคือคุณจะมีสคริปต์ (หรือชุดเดียวกัน) ที่คุณสามารถทดสอบได้ การถ่ายภาพมีสคริปต์การโยกย้ายที่จำลองได้ทดสอบได้ !!
ฉันตกหลุมรักแล้ว
ใครอีกไหม?