2012-01-31 22 views
7

Geliştirme modunda çalışırken Rails 3.1'de bir sorunla karşılaşıyoruz. Modellerimizin bazen istek üzerine yeniden yüklenmesi gibi görünüyor ve modelimizin sınıflarında yeni bir object_id ayarlandı. Hangi sonra beklenen bir ActiveRecord :: AssociationTypeMismatchRaylar modelleri, isteğe bağlı olarak oluşturulmasına neden olur. AssociationTypeMismatch

ActiveRecord :: AssociationTypeMismatch Karakter (# 2194222580) ile sonuçlanır biz development.rb içinde config.cache_classes = true açarsanız sorun gitmek gibi görünüyor Karakter (# 2185863000)

var uzakta, ancak bizim sunucularımızı sürekli olarak yeniden başlatmamız gerektiğinden, bunun gibi gelişmek gerçekçi değildir.

Modellerin taleplerin ortasında neden yeniden yüklenebileceğine dair bir fikriniz var mı, yoksa önbelleğin tüm isteği aşmasını sağlamak için bir yol varsa, bir yolu var mı?

+1

active_reload gem'i deneyin, bu modelin önbelleğini alır ve dev modda herhangi bir değişiklik yapıldığında sona erer.Nedeninde değişiklik yaptıklarını bilmiyorum.Yalnızca bu sorunu çözmek için bana yardım edeyim ve son sorunun cevabını bildirin – Amar

+0

Çalışıyormuş gibi, şu anda 3.1 raylarımız var ve görünüşe göre active_reload varsayılan olarak raylara dahil edilmiştir. 3.2. Sürekli olarak yeniden üretilmesi biraz zor, ancak birkaç gün içinde yapılmış gibi görünüyorsa bu soruyu güncelleyeceğim. Maalesef – aproctor

+0

active_reload çalışmıyor. Her ne kadar düzgün bir şekilde konfigüre etmemiş olabiliriz? – aproctor

cevap

1

config.cache_classes = false ile, modeldeki herhangi bir değişiklik yeniden yüklenmeye neden olur. Bu, modelde tanımlanmış/bilinen bir sabiti tanımlamayı/yeniden tanımlamayı içerir.

Bu sorunu rspec ve ActsAsFu kullanarak gerçekleştirdik. Test sırasında Fu sınıfının yeniden tanımlanması, ilgili (hatta dolaylı olarak ilgili) sınıfların yeniden yüklenmesine neden oldu ve ActiveRecord :: AssociationTypeMismatch hatasını ilgili nesneye aldık. Bunu anlamıştık, çünkü tek başımıza iyi geçen testler yaptık, ancak diğer testlerden sonra koşarken başarısız olduk. Çözümümüz, her yapılandırma için ayrı olarak adlandırılmış Fu sınıfları oluşturmak ve test sırasında sınıf adını yeniden atamaktan kaçınmaktı.

Yani benim tavsiye Geçmişte herhangi sizin Karakter sınıfına bilinen sabitleri (sizin Karakter sınıfına bilinen sınıflara ya da bilinen, vb)

+1

Bu, @ stuartc'ın açıklamasında farklı bir dilim gibi görünüyor. (yani, Model tanımını yeniden tanımlayan maymun yamaları, ya da ilgili modellerin tanımı.) Aynı mekanizma ... bir model orta test kuvvetlerini kademeli olarak yeniden yükleyerek değiştiriyor. –

0

yeniden tanımlanması olmadığından emin ben yeniden açılması olduğunu tespit ettik yapmaktır (maymun düzeltme) bir ActiveRecord modeli aslında tüm sınıfı yukarıdan aşağıya doğru yükler. Kod tablonuzu, class Character'dan daha fazla örnek için aramayı deneyin.

İlgili konular