2015-06-14 18 views
15

Raylarım 4.1 uygulaması, arka uç işlerinde SSH üzerinden ikinci, birincil olmayan bir sunucuya bağlanır. Sonuç olarak, raylar uygulaması her gün yeniden başlatıldığında, SSH bağlantısının canlı/yukarı olması gerekir (daha ziyade birincil, birincil olmayan sunucunun yaşamak/yükseltmesi gerekir), aksi halde uygulama çöküyor. Bu, varsayılan olarak production.rb (config.eager_load = true) içinde doğru olarak ayarlanmış istekli yüklemeden kaynaklanmaktadır.Product.rb içinde eager_load işlevinin devre dışı bırakılmasının performans etkisi nedir?

Ben hevesli yükleri devre dışı bırakarak bu bağımlılığı kırmak için cazip, ama ben performans etkisine ilişkin çok fazla bilgi bulmak mümkün değilim. Yani, benim sorularım ...

1) eager_loadfalse olarak ayarlanmışsa, uygulamanın başlangıç ​​saatini yavaşlatacak mı yoksa uygulama ilk kez vurulduklarında kaynakları hevesle yükleyecek mi?

3) eager_load ise basitçe için kapalıysa ne ölçüde olacak bu darbe app (daha sübjektif bir soru) kapalı performans? SSH bağlantı sağlar

2) modeli klasörü app\models\legacy altındadır. eager_load'u false olarak değiştirmek yerine, bu klasör istekli yüklü kaynaklardan hariç tutulabilir mi? Öyleyse nasıl? config.autoload_paths += Dir[Rails.root.join('app', 'models', '{**/}')]'u düzenlemem gerekeceğine inanıyorum ama tamamen emin değilim.

production.rb: config.eager_load true olarak ayarlanırsa,

# Eager load code on boot. This eager loads most of Rails and 
    # your application in memory, allowing both thread web servers 
    # and those relying on copy on write to perform better. 
    # Rake tasks automatically ignore this option for performance. 
    config.eager_load = true 
+1

yerine istekli yükleme değişen, doğrudan ssh erişir gelmez sınıf ayrıştırma/yükleme böylece sınıf değişmez ki? Ya da daha sağlam mı? – nathanvda

cevap

1

-

detaylı bilgi için bu blogda bir göz atın.

Ancak, ceza uygulama olasılığı (genellikle en kıt sunucu kaynaktır) daha fazla bellek kullanır olmasıdır. eager_load=false ile çok iş parçacıklı bir sunucu (örneğin, puma) kullanırsanız, iş parçacığı hatalarına da girebileceğinizi sanıyorum.

Rails otomatik olarak tüm app/* dizinlerini istekli yük yollarında içerdiğinden, diğer her şeyi hevesle yüklerken app/models/legacy'u hariç tutmanın kolay bir yolunu düşünemiyorum.

Bunun yerine, özellikle örneğin app/models/legacy içeriğini hareket olabilir Projenizin kökünde legacy/ ve autoload_paths o ekleyin:

config.autoload_paths += %W(#{config.root}/legacy) 

Şimdi Raylar hala bu dosyaları bulmak mümkün olacak, ama onlar hevesle üretimde yüklenmiş edilmeyecektir.

+0

Teşekkürler Matt - cevabınızı yanıt olarak kabul ettiniz. – user1322092

İlgili konular