2012-08-30 18 views
11

Şu anda motorlarda hareketli işlevsellik deniyorum. Şimdiye kadar gayet iyi çalışıyor, ama bir şey değiştiğinde, motorun bazı bölümlerinin neden otomatik olarak yeniden yüklendiğine biraz şaşırıyorum.Raylar Motorlar: Sunucular yeniden başlatıldığında yardımcılar sadece yeniden yüklenir

Özellikle, bir yardımcı yöntem eklerken Rails sunucusunu yeniden başlatmam gerekiyor, aksi halde Rails tarafından görülmez. Bu normal davranış mı? İşte benim motorun ilgili bölümü:

bileşenleri/iq_list.rb

# encoding: utf-8 
require 'iq_list/engine' 

# Load IqList Modules 
module IqList 
    extend ActiveSupport::Autoload 
    autoload :Helpers 
    autoload :Models 
    autoload :Controllers 
end 

bileşenleri/iq_list/engine.rb

module IqList 
    class Engine < ::Rails::Engine 
    end 
end 

bileşenleri/iq_list/helpers.rb

module IqList 
    module Helpers 
    extend ActiveSupport::Autoload 
    autoload :IqListHelper 
    end 
end 

bileşenler/iq_list/helpers/iq_list_helper.rb

module IqList 
    module Helpers 
    module IqListHelper 
     def some_method 
     # ... 
     end 
    end 
    end 
end 

Motorlar için hala çok yeniyim ve yukarıdaki kodlardan birinin bir başkasının çalışmasından aldım, lütfen bana sabırlı olun. Doğru yöne herhangi bir ipucu çok takdir edilmektedir.

+1

http://stackoverflow.com/questions/4713066/how-can-i-force-my-plugin- her bir isteğiyle yeniden yükleme – apneadiving

+0

Neden kodunuz 'components' dizininin altında? Bunu yapman ne? Bileşenler Rails'in eski bir özelliğidir (1.2). –

+0

Nerede yerleştirirsiniz? Dediğim gibi, kodu başka birinden aldım ve sanırım bunun nedeni, uygulama/bileşenlerin içindeki içeriğin düzgün bir şekilde yeniden yüklenmesidir. Ağır bir şekilde geliştirdiğiniz bir motoru nereye yerleştirirsiniz? –

cevap

1

Motorlar ile yanlış bir ağaç havlıyor olabilirsiniz. Eğer sadece endişelerinizden ayrılmaya çalışıyorsanız, muhtemelen sadece bazı eski ruby ​​sınıflarını yapmak ve onları lib/'a (elbette organize bir şekilde) yapıştırmak istersiniz.

Muhtemelen bir gemiden getirilen 'mevcut' projenizden ayrı bir motor geliştirilecektir. Dahil olan mücevherlerdeki değişiklikler sunucunuzu yeniden başlatmanızı gerektirecektir AFAIK. Her üretim hem her bir kez çalıştırmak için garanti edilir to_prepare bloğunda motorları intialization kodu

module IqList 
    class Engine < ::Rails::Engine 
    config.to_prepare do 
    ApplicationController.helper(IqListHelper) 
    end 
    end 
end 

Kodu to_prepare bloğunda yerleştirmek gerekir talep üzerine yeniden Motorunuzdan kodu gerekiyorsa

İlgili konular