Compojure(というよりRing)で静的ファイルを提供

 CompojureはRingの上に作られています。Compojureのソースはとても小さく、Ringと合わせて理解しないと、開発を行うのは難しいでしょう。

Ringは、PythonWSGIRubyのRackのClojure版。
それらがどんなものかは、こっちの解説記事を見れば分かります。


ということで、まず、CSSjavascriptを使うために、ring.middleware.fileを使って、jettyから静的ファイルを提供できるようにします。

(defroutes my-routes
  ;;(http-method route-path bindings & body)
  (GET "/" [] "<H1>Hello World.</H1>")
  (route/not-found "Page not found")
)

;ring.middleware.file の機能を使う
;ミドルウェアを使うには、たいがいwrap-*** で、my-routesを
;くるんでやればよいようです。
(def app
  (wrap-file my-routes "."))

(defn run [& args]
  "jettyサーバをポート8080で起動します。
   呼出元はブロックされません。"
  (run-jetty (var app) {:port 8080 :join? false}))

この例では、カレントディレクトリ下の全ファイルを静的ファイルとして提供するように設定したので、

カレント=プロジェクトルート=C:\Users\hoge\workspace\helloweb とすると、

C:\Users\hoge\workspace\helloweb\public\css\main.css

は、次のURLでアクセスできることになります。

http://my-server:port/public/css/main.css