하나의 html과 하나의 css 파일로 구성된 Heroku에 배포 할 간단한 Clojure 웹 앱을 만들고 있습니다. "lein new heroku MYAPP"명령을 사용하여 파일을 생성하고 시작시 다른 폴더에 html 파일을 렌더링하도록 간단한 "hello world"에서 수정하려고합니다. 내 브라우저의 로컬 호스트에서 html을로드 할 수 있었지만 할 때 CSS에 의해 수정되지 않습니다. CSS가 브라우저에서 올바르게 렌더링되도록 HTML을 수정 한 다음 heroku에 배포하려면 무엇을 변경해야합니까?
html :
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<img id="sun" src="http://goo.gl/dEEssP">
<div id='earth-orbit'>
<img id="earth" src="http://goo.gl/o3YWu9">
</div>
</body>
</html>
project.clj
(defproject solar_system "1.0.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://solar_system.herokuapp.com"
:license {:name "FIXME: choose"
:url "http://example.com/FIXME"}
:dependencies [[org.clojure/clojure "1.5.1"]
[compojure "1.1.1"]
[ring/ring-jetty-adapter "1.1.0"]
[ring/ring-devel "1.1.0"]
[ring-basic-authentication "1.0.1"]
[environ "0.2.1"]
[com.cemerick/drawbridge "0.0.6"]]
:uberjar-name "solar_system-standalone.jar"
:min-lein-version "2.0.0"
:plugins [[environ/environ.lein "0.2.1"]]
:hooks [environ.leiningen.hooks]
:profiles {:production {:env {:production true}}})
web.clj :
(ns solar_system.web
(:require [compojure.core :refer [defroutes GET PUT POST DELETE ANY]]
[compojure.handler :refer [site]]
[compojure.route :as route]
[clojure.java.io :as io]
[ring.middleware.stacktrace :as trace]
[ring.middleware.session :as session]
[ring.middleware.session.cookie :as cookie]
[ring.adapter.jetty :as jetty]
[ring.middleware.basic-authentication :as basic]
[cemerick.drawbridge :as drawbridge]
[environ.core :refer [env]]))
(defn- authenticated? [user pass]
;; TODO: heroku config:add REPL_USER=[...] REPL_PASSWORD=[...]
(= [user pass] [(env :repl-user false) (env :repl-password false)]))
(def ^:private drawbridge
(-> (drawbridge/ring-handler)
(session/wrap-session)
(basic/wrap-basic-authentication authenticated?)))
(defroutes app
(ANY "/repl" {:as req}
(drawbridge req))
(GET "/" []
{:status 200
:headers {"Content-Type" "text/html"}
:body (slurp (io/resource "index.html"))})
(ANY "*" []
(route/not-found (slurp (io/resource "404.html")))))
(defn wrap-error-page [handler]
(fn [req]
(try (handler req)
(catch Exception e
{:status 500
:headers {"Content-Type" "text/html"}
:body (slurp (io/resource "500.html"))}))))
(defn -main [& [port]]
(let [port (Integer. (or port (env :port) 5000))
;; TODO: heroku config:add SESSION_SECRET=$RANDOM_16_CHARS
store (cookie/cookie-store {:key (env :session-secret)})]
(jetty/run-jetty (-> #'app
((if (env :production)
wrap-error-page
trace/wrap-stacktrace))
(site {:session {:store store}}))
{:port port :join? false})))
;; For interactive development:
;; (.stop server)
;; (def server (-main))
여기에 디렉토리 트리가 있습니다. html 및 css 파일은 리소스 (error.html 파일 포함)에 있고 web.clj는 src / solar_system에 있으며 project.clj는 루트 폴더에 있습니다.
solar_system
├── resources
├── src
│ └── solar_system
├── target
│ ├── classes
│ └── stale
└── test
└── solar_system
lein new heroku _
템플릿이 왜이 작업을 수행하지 않는지 모르겠습니다 .
compojure.route / resources 를 사용 하여 핸들러에게 정적 파일을 찾을 위치를 알려줍니다.
(defroutes app
(ANY "/repl" ...)
(GET "/" [] ...)
(route/resources "/")
(ANY "*" [] ...))
당신이 방문하는 경우 지금 http://example.com/style.css
, 그것은 기대됩니다 resources/public/style.css
.
곁에 : 아무도 액세스 할 수없는 상태 로 갖고 싶을 수 있기 때문에 정적 자산을 제공하는 resources/public/
것이 좋습니다 .resources/
resources/secrets.txt
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다