2016-04-10 24 views
1

Sadece bir DB dökümü yükledim ve yalnızca bu tabloları oluşturdu ve verileri bu tablolara yükledim, ayrıca çok fazla geçiş yaptı.Raylar göçün nasıl yürüdüğünü/çalıştırıldığını nasıl biliyor?

Ve kalan geçişleri çalıştırdıktan sonra, rake db:migrate:status çalıştırıldığında bana her geçişin durumunun UP olduğunu, ancak geçişlerin aslında yapmaları gerekenleri yapmadığı söylenir. Örneğin, notes adında bir tablo oluşturan bir geçişim var. Örneğin,. Bu up olmuştur ve tablolar notes mevcut değil. Bu yüzden bu geçişi redo'a bağladım, ancak kodu self.down yönteminde yorumladım.

Sorum şu: Veritabanında oluşturulmaya çalışılan tablo oluşturulmasa bile bir geçiş nasıl UP durumunda olabilir. Ya da sanırım, daha önce yüklediğim db aptalca, Rails'in çoğunlukla göçmenlerin kalktığını düşünürken, aslında onlar değil, schema_migrations tablosunu doldurdu.

Şimdi, her geçiş için rake db:migrate:redo VERSION=xxxxxxx'a manüel olarak gereksinim duyar mıyım, yoksa daha iyi bir çözüm var mı?

cevap

3

Raylar, her geçişin zaman damgasını tek bir sütunda saklayan schema_migrations adında şemanıza bir tablo ekler. schema.rb'da görünmüyor, ancak Rails, hangi geçişlerin çalıştırıldığını belirlemek için ve schema.rb zaman damgasındaki zaman damgalarını schema_migrations tablosuna göre karşılaştıracaktır.

enter image description here

+1

'da veritabanı oluşturmaya çalıştığınızda RAILS_ENV = testini belirtmeniz gerekebilir. Bu doğru! Bu uygulamanın kaynak kodu https://github.com/rails/rails/blob/f47b4236e089b07cb683ee9b7ff8b06111a0ec10/activerecord/lib/active_record/railties/databases.rake#L91 adresinde bulunabilir. – Pavan

0

Raylar, bunu yapmak için Rack middleware ActiveRecord::Migration::CheckPending kullanır.

Tüm Rack middlewares Raylarını, konsolunuzda rack middleware çalıştırarak görebilirsiniz.

+0

Bu soruya cevap vermiyor. –

+0

Sanırım sorularınızı yanlış anladım. Rails ortamında bazı çatışmaların olması gerektiğini düşünüyorum. test env – qcam