나는 서로를 참조하는 두 부분이 있습니다. 내 자체 참조 템플릿이 콘솔 및 레이크에서는 캐시 다이제스트 계산을 중단하지만 서버에서는 그렇지 않습니다.
finder = ApplicationController.new.lookup_context
ActionView::Digestor.new(name: "posts/show", finder: finder).nested_dependencies
정도 등의 레이크 작업을 통해
:rake cache_digests:nested_dependencies TEMPLATE=posts/show
내가 짧은 목록을 콘솔이 너무 좋아에 나는 (템플릿이로드되고 일부 디버그 코드 출력으로) 중첩 된 종속성을 계산할 때
...
>>>>>>> users/foo
>>>>>>> users/bar
>>>>>>> users/baz
>>>>>>> users/bip
>>>>>>> users/foo
>>>>>>> users/bar
>>>>>>> users/baz
>>>>>>> users/bip
SystemStackError: stack level too deep
(템플릿 이름 변경)
: 루비 스택이 가득 찰 때까지 무한 루프의 다음 초기 의존성과의그러나 앱 서버를 실행하고 템플릿을 요청하면 무한 루프가 발생하지 않습니다. 여기
위의 모든 경우에 내 설정은 다음과 같습니다
https://github.com/rails/rails/blob/v4.1.8/actionview/lib/action_view/digestor.rb#L35는 왜 보호의 서버 환경이 아닌에서 일하고 :
config.action_controller.perform_caching = true
config.cache_store = :file_store, Rails.root.to_s + '/tmp/cache/stuff'
ActionView::Base.cache_template_loading = true
코드는 재귀 참조 보호 기능을 가지고 있음을 나타냅니다 콘솔이나 갈퀴 작업?
(또한 GitHub의 문제 https://github.com/rails/rails/issues/18667)
레일 및 레이크 작업은 완전히 다른 두 가지 방법을 사용합니다. Rails는 무한 루프 보호 기능을 가진'compute_and_store_digest'를 호출하는'ActionView :: Digestor.digest'를 호출합니다. 그러나'nested_dependencies'는 무한 루프 탐지없이 재귀 적으로'DependencyTracker.find_dependencies' 만 호출합니다. github에서'nested_dependencies'의 사용법을 확인한다면, 그것은 rake 태스크와 다른 곳에서 사용 된 것만 볼 수 있습니다. 그래서 IMHO는'nested_dependencies'의 버그입니다. – nemesv
감사합니다 ... 왜이 코멘트입니까? –