2011-11-23 12 views
7

Ruby ve Rails ile gerçekten yeni başladım ve kendimi gerçekten zevkli bulduğum şeylerden biri de sizi yararlandığı konvansiyonlar.Rake db :: migrate aslında nasıl çalışır

Bu davranışı kendi Ruby olmayan projelerimde taklit etmek istiyorum.

Sorum şu ki, aslında nasıl çalışıyor? Rails koduna bakabileceğimi biliyorum, ama içinde neler olup bittiğini anlayabilmem için yeterince uzak değilim.

Bunun bir temel komut dosyası aldığını ve sonra güncelleştirme şeması değişikliklerini buna karşı çalıştırdığını biliyorum. Ama hangi versiyonun açık olduğunu nereden biliyor? Bunu başka bir çerçeve/veritabanında nasıl taklit edebilirim?

+1

Son geçişin ne olduğunu görüyoruz. Bundan sonra gelenleri çalıştırır. * Çok * geniş, SQL yazmak için bir DSL (3.1'de tersine çevrilebilir SQL). Daha spesifik olabilir misin? –

+0

Pek çok yönden çalışıyor ... Hangi özel yönü sizi kızdırıyor? –

+0

Soruyu güncelledik. Özellikle göç ve yıkım hakkında konuşuyorum (örn. Komisyon göçü geri alma). – Dan

cevap

21

Not: Bu, Rails 2.x için geçerlidir. Rails 3'le daha fazla zaman geçirmediğim için raylar 3 için geçerli olmayabilir.

Raylar, schema_migrations adlı özel bir gizli tablo oluşturur. Bu tabloda version adında tek bir sütun var. Ve sahip olduğunuz her geçiş için bu sütunda bir satır var. Değer, geçişler dosya adı zaman damgasıyla eşleşen zaman damgasıdır.

Taşırken, tüm geçişlerinizi kronolojik sırayla (timstamp tabanlı adlandırma kuralı nedeniyle alfabetik sırayla olur) görür. Her geçiş için, schema_migrations tablosunda eşleşen bir satır arar. Birini bulamazsa, bu geçişi çalıştırır ve tablonun zaman damgasını ekler. Bir tane bulursanız, daha önce koştuğunu ve basitçe atladığını varsayar.

Sonuç olarak, 2 geliştiricinin herhangi bir sıraya göre geçiş yapması mümkündür ve sorun değil. Bunun nedeni, Rails'in tam olarak hangi geçişlerin yürütüldüğünü ve ne zaman veritabanınızın ilk önce onları görmediğini bilmediğini bilmesidir.

Bu şekilde kendiniz gibi bir şey yapmak için, bu durumu hangi adımlar atılmış ve hangilerinin yapılmadığı hakkında kalıcı olarak saklamanın bir yoluna ihtiyacınız vardır.

+0

Bu tam olarak aradığım şey. Çok teşekkürler. – Dan

+0

Bu bağlamda schema.rb'nin alaka düzeyi nedir? Tüm geçişleri veritabanı sütunuyla eşleştiriyorum, schema.rb için hiç kullanmam olur mu? –

+0

Bir photoshop dosyası gibi. Geçişler katmanlardır ve schema.rb, birleştirilen tüm katmanların son düzleştirilmiş sonucudur. Eğer şemayı test veritabanınıza yüklemeniz gerekiyorsa, aynı sonucu elde etmek için sırayla yüzlerce geçişi çalıştırmak yerine bunu hızlıca yapabilirsiniz. –

İlgili konular