2012-08-30 2 views
11

현재 기능을 엔진으로 옮겨보고 있습니다. 지금까지는 훌륭하게 작동하지만, 뭔가 변경 될 때 엔진의 특정 부분이 항상 자동으로 다시로드되는 이유는 다소 혼란 스럽습니다.레일즈 엔진 : 서버를 다시 시작할 때 헬퍼 만 다시로드됩니다.

특히 헬퍼 메소드를 추가 할 때 레일스 서버를 다시 시작해야합니다. 그렇지 않으면 레일스에서 ​​볼 수 없습니다. 이것은 정상적인 행동입니까? 여기 내 엔진 관련 부분 :

구성 요소/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 

구성 요소/iq_list/engine.rb

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

구성 요소/iq_list/helpers.rb

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

구성 요소/iq_list/helpers/iq_list_helper.rb

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

저는 아직 엔진에 익숙하지 않고 위의 많은 코드를 다른 사람의 작업에서 가져 왔으므로 저에게 인내심을주십시오. 올바른 방향으로 어떤 힌트도 높게 평가됩니다.

+1

http://stackoverflow.com/questions/4713066/how-can-i-force-my-plugin- to-re-load-with-each-request – apneadiving

+0

코드가'components' 디렉토리 아래에있는 이유는 무엇입니까? 네가하는 일은 무엇인가? 구성 요소는 Rails (1.2)의 고대 기능입니다. –

+0

어디에 넣을까요? 말했듯이, 나는 다른 사람으로부터 코드를 가져 왔고, 이는'app/components' 물건이 제대로 다시로드되기 때문에 발생했다고 생각합니다. 어디에서 엔진을 개발하고 있습니까? –

답변

1

엔진으로 잘못된 나무를 짖고있는 것처럼 보입니다. 단순히 관심사를 분리하려고하는 경우, 평범한 오래된 루비 클래스를 만들고 (물론 체계적으로) lib/에 붙이고 싶을 것입니다.

엔진은 보석을 통해 가져온 '현재'프로젝트와 별도로 개발됩니다. 포함 된 보석을 변경하면 서버 AFAIK를 다시 시작해야합니다. 당신이 모든 당신이 생산 및 모든에 한 번 실행을 보장하는 to_prepare 블록의 엔진 사용하는 초기화 코드

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

코드의 to_prepare 블록에 배치 할 필요가 요청에 다시로드 엔진의 코드가 필요한 경우

관련 문제