2013-11-20 4 views
3

ns-tracker를 사용하여 .clj 파일을 변경했을 때 네임 스페이스를 다시로드하는 데 유용한 autoreload-server 예제를 사용하고 있습니다.받침대 서비스에서 템플릿 자동 확대/변경 감지

https://github.com/pedestal/samples/blob/master/auto-reload-server/dev/dev.clj

그러나, 자원/공공 디렉토리에서 템플릿을 enlive 변경 사항을 따기되지 않습니다. 나는 defn이 시계의 벡터에 내 템플릿 경로를 추가했습니다 :

`([] (watch ["src" "resources" "resources/public" "public"]))` 

뿐만 아니라이 같은 enlive deftemplate를 사용하는 네임 스페이스에

:

(net.cgrand.reload/auto-reload *ns*)

그러나이 작동하지 않습니다. 내 가정은 ns-tracker는 clj 파일에서만 작동하며 확장 된 재로드 기능을 잘못 사용하고 있습니다.

누구나 좋아하는 사람이 있습니까? 알아 낸 사람이 있습니까? 아니면 시도 할 아이디어가 있습니까?

+0

참조 나는 선반 떨어져 작업 솔루션을 찾을 수 없습니다, 그래서 일을 작은 링 래퍼를 작성 끝났다. 너를 미치게 만들지, 안 그래? 나는 코드를 파헤쳐 보려고합니다. –

답변

0

Enlive Issue #6: Auto-reloading of templates이 2013 년 12 월 초에 버전 1.1.5에서 this commit으로 해결되기를 기대하고있었습니다. 하지만, 내 테스트에서, 나는 그것이 고칠 수 있는지 확인할 수 없습니다. 내가 뭔가 잘못하고있는 것 같아.


참고 : 예를 들어 인용 한 예는 pre-0.2.0 tooling changes for Pedestal입니다. 나는 틀릴 수도 있지만, 그 샘플 파일이 아니라 현재의 문서를 따라하는 것이 더 낫다고 생각합니다.


Pedestal's 'hello world' service app의 주요 제안 (변경 될 수 있음)은 다음과 같습니다

  1. 사용 ns-tracker 다시로드 네임 스페이스를 알아낼 수 있습니다.

  2. :resource-paths ["config", "resources"]에서 project.clj까지를 입력하면 Enlive가 정적 HTML 리소스를 찾을 수 있습니다. ns-tracker:resource-paths에주의를 지불하지 않기 때문에

이 단계는 다시로드를 실행하는 데 자원에 변화를 야기하기에 충분하지 않습니다. 세부 사항은 다음과 같습니다.

  1. ns-trackerclojure.tools.namespace.find/find-clojure-sources-in-dir에 의존합니다. 당신이 그것에 대해 생각하면 ns-tracker 자원을 선택하지 않는 이유
  2. clojure.tools.namespace.find/find-clojure-sources-in-dir

, 당신은 볼 수 있습니다; Clojure 네임 스페이스가 아닙니다. 제 의견으로는, 이것은 ns-tracker이라는 이름을 가진 일관된 디자인 결정입니다.

여전히 우리가 의 리소스를 변경하면을 다시로드하려는 페데스탈의 관점에서 보면 실용적입니다.


이제 다른 것을 추가하겠습니다. 툴링 관점에서, resources 디렉토리에서 watch를 설정한다고 가정 해 봅시다.그렇더라도, 특정 Clojure 네임 스페이스가 영향을받는 세부적인 방식으로 식별하는 것은 쉽지 않습니다. 하나의 리소스는 defsnippet (복수 deftemplate ')으로 사용될 수 있습니다. 따라서 하나의 리소스 변경이 여러 Clojure 네임 스페이스에 영향을 줄 수 있습니다. 자원을 가리키는 문자열은 동적으로 구성 될 수도 있습니다. 따라서, 재로드 할 네임 스페이스의 정확한 최소 집합을 파악하는 것은 일반적인 경우 불가능할 수 있습니다.

이 모든 것은 리소스가 변경 될 때마다 모든 Clojure 네임 스페이스를 다시로드하는 것이 쉽고 안전해야합니다.


요약하면, 나는이 문제를 직접 풀지는 못했지만 위에 설명 된 내용이 볼을 앞으로 옮기는 데 도움이 될 것입니다.