migration คืออะไร

ผมทำตามหนังสือน่ะครับ

ด้วยคำสั่ง

$rake db:migrate

อ่านในหนังสือแล้วยังไม่เข้าใจว่าคือะไร และหน้าที่คืออะไร

คือปกติเวลาพัฒนาโปรแกรมแบบทำไปเรื่อย ๆ นั้น database ก็เป็นสิ่งที่ต้องแก้ไขตลอด migration ก็คือกระบวนการปรับ database ให้เปลี่ยนไปตามที่เราต้องการครับ ทีนี้ มันจะมีเลขระบุอยู่ (ลองดูใน db/migrate) มันก็จะเป็นการเก็บเวอร์ชันของการเปลี่ยนแปลงเอาไว้ครับ เรียกดูได้ สั่งแก้กลับได้ ประมาณนี้ครับ

migration เป็นชุดของคำสั่งที่ทำหน้าที่ สร้าง, แก้ไข, หรือ ลบ table structure ใน database
rails มี best practice ว่า การสร้างหรือแก้ไขใดๆที่เกิดขึ้นกับ database ให้มาสร้าง script ไว้ใน directory db/migrate
(การใช้ migration ไม่ได้บังคับให้ทำ จะไม่ทำก็ได้)

คำว่า migration มีนัยยะถึง การเปลี่ยนแปลง
ที่เป็นเช่นนี้ เพราะ ในชีวิตจริง table structure ของเรามันจะเปลี่ยนแปลง ไปเรื่อยๆ ตาม requirement ที่เปลี่ยนไป
ถ้าอ่านในหนังสือ จะเห็นว่า มันมี concept เรื่อง version ด้วย
version คือ เลขลำดับ ที่แสดงถึงการเปลี่ยนแปลง ณ เวลาหนึ่ง ใช้ในการจัดการและควบคุม
เช่น เราบอกว่า ตอนนี้ production เรามี structure table ถึงเลข version 10 แล้ว
แต่ development ของเรามีเลข version เลยไปถึงเลข 11 แล้ว
แสดงว่า มี feature จำนวนหนึ่ง ที่กำลัง develop อยู่ แต่ยังไม่ได้ deploy ไปที่ production

ขอบคุณครับ

แต่ผมลองเปลี่ยนค่าในไฟล์ migrate/001_create_products.rb ลองให้ไปเปลี่ยนฐานข้อมูลที่สร้างแล้ว

(แก้ไขอันเดิมน่ะครับ) พอแก้ไขแล้วผมก็ใช้คำสั่ง $rake db:migrate เพื่ออัพเดท(เข้าใจเดาๆ) ใข่ไหมครับ

จากนั้นผมก็ไปดูในฐานข้อมูล แต่ในฐานข้อมูลไม่มีการเปลียนแปลงครับ ยังเป็นฐานข้อมูลที่สร้างมาจากโค้ดอันเดิม

ผมเลยสงสัยว่า เราสามารถแก้ไขฐานข้อมูลที่สร้างแล้ว ได้อย่างไงครับ

** ถ้าพี่ต้องการโค้ดในไฟล์ migrate/001_create_products.rb บอกได้นะครับ เด๋วผมเอามาลงให้

แสดงว่าเอ็งยังไม่เข้าใจ concept เรื่อง version
ถ้ามีการเปลี่ยนแปลง ก็แสดงว่าต้องสร้าง file 002_xxxxx.rb
แล้ว เวลา run rake db:migrate มันจะไป check ว่า database ปัจจุบันอยู่ version ไหน
ใน directory db/migrate มี script version ไหนที่ยังไม่ run อยู่บ้าง
ถ้ามี ก็จัดการ run ให้
ถ้าไม่มี ก็ไม่ทำอะไร

ขอบคุณมากครับ..

อย่าเพิ่งเบื่อเด็กน้อยคนนี้นะครับ

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น