레일 3 초기화 프로세스를 수행하면서 Rails :: Engine (10 개가 있음)에 정의 된 모든 이니셜 라이저가 Rails :: Application 인스턴스에 두 번 이상 추가되었다는 것을 알았습니다. 즉, 이니셜 라이저가 여러 번 실행됩니다. 1. 레일 : 응용 프로그램 # 이니셜 라이저 : 다음은 분석입니다Rails :: Application에 Rails :: Engine에 정의 된 중복 이니셜 라이저가 여러 개있는 이유는 무엇입니까?
def initializers #:nodoc:
Bootstrap.initializers_for(self) +
super +
Finisher.initializers_for(self)
end
그것은 호출 슈퍼로 정의된다 (레일 :: 엔진) 방법은 다음과 같습니다
이def initializers
initializers = []
ordered_railties.each do |r|
if r == self
initializers += super
else
initializers += r.initializers
end
end
initializers
end
우리는 볼 수 있습니다 모든 엔진 (Rails :: Engine에서 상속받은 클래스)이 Rails :: Engine의 초기화 프로그램을 Rails :: Engine의 이니셜 라이저에 추가합니다. 하지만 다른 모든 엔진은 Rails :: Application의 ordered_railties에 포함되어 있으므로 이니셜 라이저도 Rails :: Application의 엔진에 추가됩니다. Rails :: Engine의 초기화 프로그램이 Rails :: Application에 여러 번 추가되었다고 결론 지을 수있다. 우리는 콘솔 정보에서 볼 수 있습니다
1.9.3p194 :002 > Rails.application.initializers.map(&:name).size
=> 119
1.9.3p194 :001 > Rails.application.initializers.map(&:name).uniq.size
=> 79
그래서 레일의 모든 초기화 :: 엔진은 레일의 5 배를 추가 :: 응용 프로그램. 왜 이런 일이 일어 났는지 궁금합니다. 특별한 이유가 있습니까?