Rails ติดตามได้อย่างไรว่าการย้ายข้อมูลใดที่รันสำหรับฐานข้อมูล


95

อ้างอิงจาก Rails doc: http://guides.rubyonrails.org/migrations.html

"แทร็ก Active Record ที่มีการเรียกใช้การย้ายข้อมูลไปแล้วดังนั้นสิ่งที่คุณต้องทำคืออัปเดตแหล่งที่มาของคุณและเรียกใช้ rake db: migrate"

ActiveRecord ทำสิ่งนี้ได้อย่างไร? Active Record เก็บข้อมูลไว้ที่ไหน

ฉันสงสัยว่าสิ่งนี้อาจถูกเก็บไว้ในฐานข้อมูลเอง? ในโต๊ะที่ไหนสักแห่ง

บนเครื่องพัฒนาของฉันฉันรันการย้ายข้อมูลทั้งหมด จากนั้นฉันคัดลอกฐานข้อมูลการผลิตโดยใช้ mysqldump จากนั้นฉันก็รัน "rake db: migrate: status" มันแสดงการย้ายข้อมูลที่ต้องรันบนฐานข้อมูลการผลิตอย่างถูกต้อง

ฉันเคยคิดว่า ActiveRecord ติดตามการย้ายข้อมูลครั้งล่าสุดโดยใช้การประทับเวลา แต่ฉันคิดว่านี่ไม่เป็นความจริงเนื่องจาก ActiveRecord เรียกใช้การย้ายข้อมูล "เก่ากว่า" ที่รวมเข้ากับโค้ดสาขาอื่น

คนที่มีความรู้ภายในเกี่ยวกับเรื่องนี้อย่างละเอียดได้หรือไม่? ขอบคุณ


1
มันมีตารางในฐานข้อมูลที่คอยติดตามฉันเชื่อ
Jack Franklin

คำตอบ:


169

Rails สร้างตารางในฐานข้อมูลของคุณที่เรียกว่าschema_migrationsเพื่อติดตามการย้ายข้อมูลที่รัน

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

ตัวอย่างเช่นการเรียกใช้ไฟล์การย้ายข้อมูลที่มีชื่อว่า20120620193144_create_users.rbจะแทรกแถวใหม่ที่มีเวอร์ชัน20120620193144ลงในschema_migrationsตาราง

คุณมีอิสระที่จะแนะนำการย้ายข้อมูลด้วยเวอร์ชันก่อนหน้า Rails จะเรียกใช้การย้ายข้อมูลใหม่ทุกครั้งที่ไม่มีแถวที่schema_migrationsเกี่ยวข้อง ตัวเลขนำหน้าไม่จำเป็นต้องเป็นการประทับเวลาคุณสามารถเรียกการย้ายข้อมูล001_blah.rbได้ Rails เวอร์ชันก่อนหน้านี้ใช้รูปแบบนี้และใช้การกำหนดหมายเลขตามลำดับสำหรับการย้ายข้อมูลที่สร้างขึ้นใหม่ เวอร์ชันที่ใหม่กว่าได้เปลี่ยนไปใช้การประทับเวลาเพื่อช่วยป้องกันไม่ให้นักพัฒนาหลายรายสร้างการย้ายข้อมูลด้วยหมายเลขเดียวกันโดยอิสระ


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