2017-03-26 1 views
0

マイフォルダ構造は、私が リングを使用してHTMLページへのパスとのGradle

(ns com.lapots.platform.web.core 
    (:use ring.adapter.jetty) 
    (:use com.lapots.platform.web.router.core) 
    (:require [ring.middleware.reload :refer [wrap-reload]]) 
    (:import [org.eclipse.jetty.server.handler StatisticsHandler]) 
    (:gen-class)) 

(def a-minute 60000) 

(defn conf 
    [server] 
    (let [stats-handler (StatisticsHandler.) 
      default-handler (.getHandler server)] 
     (.setHandler stats-handler default-handler) 
     (.setHandler server stats-handler) 
     (.setStopTimeout server a-minute) 
     (.setStopAtShutdown server true))) 

(def app 
    (-> routes 
     wrap-reload)) 

(defn -main [& args] 
    (run-jetty app {:port 3000 :configurator conf :join? false})) 

router/core.clj桟橋

ため main関数は、このコード

(ns com.lapots.platform.web.router.core 
    (:require [compojure.core :refer [defroutes GET ANY]] 
       [liberator.core :refer [defresource resource]] 
       [ring.util.response :as resp])) 

(defresource rest-handler 
      :handle-ok "rest response" 
      :etag "fixed-etag" 
      :available-media-types ["text/html"]) 

(defn wrapped-file-response [request] 
    (println "Attempt to read index.html") 
    (resp/resource-response "index.html" {:root "resources"})) 

(defroutes routes 
      (GET "/" request rest-handler) 
      (GET "/home" request wrapped-file-response)) 
を持っている必要があり、私の core.cljでこの

src 
    main 
     clojure 
       .../core.clj 
     webapp 
       WEB-INF 
        index.html 

のように見えます

私はjettyのサーバを典型的に開始しますgradleタスク

task startServer(dependsOn: classes, type: JavaExec) { 
    main = 'com.lapots.platform.web.core' 
    classpath = sourceSets.main.runtimeClasspath 
} 

しかし、index.htmlファイルを解決することができません。 (/は正しいrest responseメッセージを返します)。

htmlページへのパスを指定する方法routesの場合は?

答えて

1

build.gradleを表示していないため、クラスパスの設定方法がわかりません。デフォルトを使用している場合、ファイルはクラスパスで使用できないため、${rootDir}/src/main/resources(クラスパスに含まれるリソース/非コードファイルのデフォルトの場所です)とresourcesサブディレクトリの下にある必要があります。 ring.util.response/resource-response:rootresourceに設定されています。

index.htmlは、次のパスの下にあります。${rootDir}/src/main/resources/resources/index.html

+0

はい私はデフォルトを使用していました。うわー、それは動作します。しかし、 'clojurescript'に依存しない' web'ベースのアプリケーションのベストプラクティスは何ですか? – lapots

+1

通常は、あなたのHTTPサーバが提供する資産をクラスパスのサブディレクトリ(通常は '$ {rootDir}/src/main/resources/public')に置くことです。 HTTP経由では使用できません。 –

関連する問題