1

그래서 저는 clojure n00b입니다. 작업중인 프로젝트의 경로를 얻으려고 할 때 뭔가 빠졌습니다.webnoir에서 defroutes가 작동하는 데 문제가 발생했습니다.

순환 종속성에 문제가있어 Django로 작업 한 후 defpage과 같이 코드베이스 전체에 뿌리 내리기보다는 한 곳에서 모든 경로를 정의하는 것이 훨씬 낫다고 생각합니다. 내 루트에서 다음

(ns blktechies-home.core 
    (:use compojure.core 
     hiccup.middleware) 
    (:require [compojure.route :as route] 
      [blktechies-home.routes :as site-routes] 
      [compojure.handler :as handler] 
      [compojure.response :as response])) 

(def app 
    (-> (handler/site site-routes/app) 
     (wrap-base-url))) 

내가 다음이 파일 : 이것은 내 core.clj 파일

입니다 : 코드 상에,

(ns blktechies-home.routes 
    (:use compojure.core 
     noir.core 
     hiccup.middleware) 
    (:require [compojure.route :as route] 
      [compojure.handler :as handler] 
      [compojure.response :as response] 
      [blktechies-home.views.common :as common])) 

(defroutes app 
    (GET "/" [] (common/main-layout 
       (welcome/index-page))) 
    (route/resources "/") 
    (route/not-found "<h1>NOPE</h1>")) 

모든 것이 404'ing있다가, 나는 여기에서 어디로 가야할지 모르겠다. defpage으로 사이트를 사용할 수 있었지만 경로 수가 늘어남에 따라 추한 것처럼 보이지 않고 확장 할 수없는 것처럼 보였습니다.

그래서

  • 내가 잘못 여기서 뭐하는 거지? 기본 컴 포지/클로저/링 레이어에 대한 통찰력은 최고 일 것입니다.
  • 이것이 경로를 정의하는 최선의 방법이 아니라면 무엇입니까?
  • github에 큰 clj-noir 사이트의 좋은 예가 있습니까? (내 구글 - Fu는 나를 실패했습니다.) 어쩌면 당신은이 페이지를 도움이 Global Noir Routes (한 곳에서 정의하는 경로를 허용하는 defpage 매크로 변형의 구현을) 찾아 낼 것입니다

답변

1

노아에서 같은 위치에 모든 것을 가지고 싶다면, 당신의 모든 defpage를 하나씩 같은 네임 스페이스에 넣을 수 있습니다. 당신의 예제에서 (GET "/"...) 경로를 정의한 것과 같은 방식으로 "실제"작업을 수행하는 다른 기능을 위임하는 것만 큼 간단 할 수 있습니다.

내가 뭘 잘못하고 있니? 단지를 추가로

핵심 : 기본 compojure/Clojure의/반지 층에 어떤 통찰력은 당신이 잘못하고있는 것을 확인

하지, 당신의 코드는 최소한의 변경의 부부와 함께 나를 위해 작동 좋지 않을까 파일을로드 할 때 ring.adapter.jetty는 부두 서버를 시작합니다 :

(ns blktechies-home.core 
    (:use compojure.core 
     hiccup.middleware 
     [ring.adapter.jetty :only [run-jetty]]) 
    (:require [compojure.route :as route] 
      [blktechies-home.routes :as site-routes] 
      [compojure.handler :as handler] 
      [compojure.response :as response])) 

(def app 
    (-> (handler/site site-routes/app) 
    (wrap-base-url))) 

(run-jetty app {:port 8080 :join? false}) 

귀하의 루트 파일을 전망 "없이.일반적인 "네임 스페이스 : 내 인터넷 검색에서

wget http://localhost:8080/ -O - -q 
the root path 
+0

철저한 응답에 감사드립니다. 내가하고자하는 것은 뷰/공통 네임 스페이스에서 함수를 호출하는 것입니다 (간략하게 생략했습니다). 나는이 부대에 부두 코드를 추가하고보고 할 것입니다. – KyleWpppd

+0

좋아, 그래서 그 일을하려고, 솔직히, 내가 뭘 잘못하고 있는지 말할 수 없습니다. Defroutes는 작동하는 것처럼 보이지만, 나는 다시 lein을 시작하고, 그렇지 않을 것입니다. 어떤 컴파일 문제가 있음을 의미합니다. 마지막으로 route 파일에 모든 defpages를 넣은 다음'load-views-ns'를 사용하여로드 된 라우트 파일을 가져 오는 것이 었습니다. 이것은 아마 해킹 된 솔루션 일 뿐이지 만 부끄러움에 질려있었습니다. 나는이 문제를 해결하기에 충분할만큼이 답변을 받아 들일 것입니다. – KyleWpppd

1

.

+0

:

(ns blktechies-home.routes (:use compojure.core noir.core hiccup.middleware) (:require [compojure.route :as route] [compojure.handler :as handler] [compojure.response :as response])) (defroutes app (GET "/" [] "the root path") (route/resources "/") (route/not-found "<h1>NOPE</h1>")) 

이제 REPL 시작 :

lein repl 

를 코어로드 :

user=> (load-file "src/blktechies_home/core.clj") #<Server [email protected]> 

을 그리고 루트를 wgetting 그 블로그 게시물을 발견했는데, 내 비 Clojure perspec 천천히, 그것은 특히 우아하게 보이지 않았다. 그래도 작동 할 것 같습니다. – KyleWpppd

관련 문제