Rails bir veritabanı için hangi geçişlerin çalıştığını nasıl takip eder?


95

Rails belgesine göre: http://guides.rubyonrails.org/migrations.html

"Aktif Kayıt, geçişlerin zaten çalıştırılmış olduğunu izler, bu nedenle tek yapmanız gereken kaynağınızı güncellemek ve rake db: migrate'i çalıştırmaktır."

ActiveRecord bunu gerçekten nasıl yapıyor? Active Record verileri nerede saklıyor?

Bunun veritabanının kendisinde saklanabileceğinden şüpheleniyorum? Bir yerde bir masada.

Geliştirme makinemde tüm geçişleri yaptım. Daha sonra üretim veritabanını mysqldump kullanarak kopyaladım. Sonra "rake db: migrate: status" çalıştırdım, üretim veritabanında çalışması gereken geçişleri doğru şekilde gösteriyor.

ActiveRecord'un zaman damgasını kullanarak çalıştırılan son geçişi takip ettiğini düşünürdüm. Ancak bunun doğru olmadığını düşünüyorum çünkü ActiveRecord başka bir kod dalından birleştirilmiş "eski" geçişleri doğru şekilde çalıştırıyor.

Bunun hakkında içeriden bilgisi olan biri ayrıntılı olabilir mi? Teşekkürler


1
Veritabanında takip eden bir tablo var sanırım.
Jack Franklin

Yanıtlar:


169

Rails, veritabanınızda schema_migrationshangi geçişlerin çalıştığını takip etmek için çağrılan bir tablo oluşturur .

Tablo tek bir sütun içerir version. Rails bir geçişi çalıştırdığında, geçişin dosya adının başındaki rakamları alır ve bu "sürüm" için çalıştırıldığını belirten bir satır ekler. Bu geçişi geri alırsanız, Rails'den ilgili satırı siler schema_migrations.

Örneğin, adlı bir taşıma dosyası çalıştırmak , tabloya 20120620193144_create_users.rbsürümünün bulunduğu yeni bir satır ekler .20120620193144schema_migrations

Herhangi bir noktada, önceki sürümlerle geçişleri başlatmakta özgürsünüz. Rails, içinde karşılık gelen bir satır bulunmayan yeni geçişleri her zaman çalıştırır schema_migrations. Baştaki rakamların bir zaman damgası olması gerekmez, geçişinizi arayabilirsiniz 001_blah.rb. Rails'in önceki sürümleri bu biçimi kullanıyordu ve yeni oluşturulan geçişler için sıralı numaralandırma kullanıyordu. Sonraki sürümler, birden çok geliştiricinin bağımsız olarak aynı numaraya sahip geçişler oluşturmasını önlemeye yardımcı olmak için zaman damgalarına geçti.


Özellikle monte edilebilir bir motor ve sahte uygulamanın bir karışımını kullanıyorsanız yararlıdır
Donato
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.