ruby on rails - كيف تتبع Rails أي عمليات الترحيل التي تم تشغيلها لقاعدة البيانات؟



ruby-on-rails activerecord (1)

ينشئ Rails جدولًا في قاعدة البيانات يسمى schema_migrations لتتبع عمليات الترحيل التي تم تشغيلها.

يحتوي الجدول على عمود واحد ، version . عندما يقوم Rails بتشغيل الترحيل ، فإنه يأخذ الأرقام الرئيسية في اسم ملف الترحيل ويدرج صفًا لهذا "الإصدار" ، مشيرًا إلى أنه تم تشغيله. إذا schema_migrations هذا الترحيل ، فسيقوم Rails بحذف الصف المقابل من schema_migrations .

على سبيل المثال ، سيؤدي تشغيل ملف ترحيل باسم 20120620193144_create_users.rb إلى إدراج صف جديد بإصدار من 20120620193144 في جدول schema_migrations .

أنت حر في أي نقطة لتقديم عمليات الترحيل مع الإصدارات السابقة. سيعمل القضبان دائمًا على تشغيل أي عمليات ترحيل جديدة لا يوجد بها صف مقابل في schema_migrations . لا يجب أن تكون الأرقام الرئيسية هي طابع زمني ، يمكنك الاتصال بهجرة 001_blah.rb . استخدمت الإصدارات السابقة من Rails هذا التنسيق ، واستخدمت الترقيم التسلسلي لعمليات الترحيل التي تم إنشاؤها حديثًا. تحولت الإصدارات الأحدث إلى الطوابع الزمنية للمساعدة في منع العديد من المطورين من إنشاء عمليات ترحيل بشكل مستقل باستخدام الرقم نفسه.

وفقًا لوثيقة Rails: http://guides.rubyonrails.org/migrations.html

"يسجل السجل النشط عمليات الترحيل التي تم تشغيلها بالفعل ، لذا فكل ما عليك فعله هو تحديث المصدر وتشغيل rake db: migrate."

كيف يقوم ActiveRecord بالفعل بهذا؟ أين يقوم Active Record بتخزين البيانات؟

وأظن أن هذا قد يتم تخزينها في قاعدة البيانات نفسها؟ في جدول في مكان ما.

على جهاز التطوير الخاص بي ، قمت بتشغيل جميع عمليات الترحيل. ثم قمت بنسخ قاعدة بيانات الإنتاج عبر استخدام mysqldump. ثم قمت بتشغيل "rake db: migrate: status" ، حيث تعرض بشكل صحيح عمليات الترحيل التي يجب تشغيلها في قاعدة بيانات الإنتاج.

اعتدت على الاعتقاد بأن ActiveRecord بتتبع تشغيل الترحيل الأخير باستخدام الطابع الزمني. ولكن أعتقد أن هذا ليس صحيحًا لأن ActiveRecord يعمل بشكل صحيح على تشغيل عمليات الترحيل "الأقدم" المدمجة من فرع شفرة آخر.

يمكن للشخص مع معرفة داخلية من هذا وضع؟ شكر





activerecord