Otomatik yükleme işlerinin büyüsü
Otomatik yükleme işlerinin yapıldığı klasörleri kontrol etme seçeneğinin diğer yanıtlarda yeterince ele alındığını düşünüyorum. Ancak, başka birinin otomatik yükleme yollarını gerektiği gibi değiştirmiş olsa da yüklenen sorunlara sahip olması durumunda, bu cevap bu otomatik yükleme şeyin arkasındaki sihrin ne olduğunu açıklamaya çalışır.
Yani alt dizinlerden bir şeyler yüklemek söz konusu olduğunda, farkında olmalısınız. Bazen Ruby / Rails büyüsü (bu sefer çoğunlukla Rails) bir şeyin neden olduğunu anlamayı zorlaştırabilir. Otomatik yükleme yollarında bildirilen tüm modüller yalnızca modül adı üst dizin adına karşılık geliyorsa yüklenir. Yani böyle bir lib/my_stuff/bar.rb
şeye koymaya çalıştığınızda :
module Foo
class Bar
end
end
Otomatik olarak yüklenmez. Sonra tekrar size ebeveyn dir adlandırmak eğer foo
bu şekilde yoluna adresinden modülü barındıran: lib/foo/bar.rb
. Senin için orada olacak. Başka bir seçenek de modül adıyla otomatik olarak yüklenmesini istediğiniz dosyayı adlandırmaktır. Açıkçası bu isimle sadece bir dosya olabilir. Eşyalarınızı birçok dosyaya bölmeniz gerekiyorsa, elbette bir dosyayı diğer dosyaları gerektirecek şekilde kullanabilirsiniz, ancak bunu önermiyorum çünkü geliştirme modundayken ve diğer dosyaları değiştirdiğinizde Rails otomatik olarak yapamıyor onları sizin için yeniden yükleyin. Ancak gerçekten isterseniz, modül adına göre bir dosyaya sahip olabilirsiniz, bu da modülü kullanmak için gereken gerçek dosyaları belirtir. Böylece iki dosyanız olabilir: lib/my_stuff/bar.rb
ve lib/my_stuff/foo.rb
birincisi yukarıdakiyle aynıdır ve ikincisi tek bir satır içerir:require "bar"
ve bu da aynı şekilde işe yarayacaktır.
PS: Bir önemli şey daha eklemek zorunda hissediyorum. Son zamanlarda, lib dizininde otomatik olarak yüklenmesi gereken bir şey olmasını istediğimde, bu proje için özel olarak geliştirdiğim bir şeyse (genellikle, bir gün olabilir) birçok projede kullanılan bir "statik" kod pasajına veya bir git alt modülüne, vb. dönüşür. bu durumda kesinlikle lib klasöründe olmalıdır) o zaman yeri hiç lib klasöründe değildir. Belki de uygulama klasörü altında bir alt klasörde olmalıdır · Ben bu şeyler yapmak için yeni raylar yolu olduğunu hissediyorum. Açıkçası, aynı sihir, eşyalarınızı koyduğunuz yerlerde otomatik yükleme yollarının olduğu her yerde çalışıyor, bu yüzden bu şeylere iyi geliyor. Her neyse, bu konu hakkındaki düşüncelerim. Katılmakta özgürsünüz. :)
GÜNCELLEME: Sihir türü hakkında ..
Severin yorumunda işaret ettiği gibi, çekirdek "bir modül mekanizmasını otomatik yükle" emin Ruby'in bir parçasıdır, ancak otomatik yükleme yolları şeyler değildir. Yapmak için raylara ihtiyacınız yokautoload :Foo, File.join(Rails.root, "lib", "my_stuff", "bar")
. Ve Foo modülüne ilk kez başvurmaya çalıştığınızda, o zaman sizin için yüklenir. Bununla birlikte, Rails'in yaptığı şey, bize kayıtlı klasörlerden otomatik olarak bir şeyler yüklemeye ve yüklemeye yönelik bir yol sağlar ve bu, adlandırma kuralları hakkında bir şey varsayması gerektiği şekilde uygulanmıştır. Bu şekilde uygulanmadıysa, şu anda yüklü olmayan bir şeye başvurduğunuzda, tüm otomatik yükleme klasörlerindeki tüm dosyaları gözden geçirmeli ve bunlardan herhangi birinin referans vermeye çalıştığınız içeriği içerip içermediğini kontrol etmelisiniz. Bu da otomatik yükleme ve otomatik yeniden yükleme fikrini yener. Ancak, bu kurallar uygulandığında, tanımlanabileceği yere yüklemeye çalışmanız ve sadece yüklemeniz modül / sınıftan düşebilir.
app/lib
.