2012-05-21 1 views
9

나는 Heroku에서 Clojure/Noir 앱을 배포하는 것을 노리고 있으며, 대부분 내 앱을 가지고 있습니다. 그러나 필요한 마지막 부분은 Heroku에 배포 할 때 내 앱의 호스트 이름을 파악하는 것입니다. 이상적으로, 하드 코딩 대신 동적으로이 작업을 수행하려고합니다.Heroku에서 현재 호스트 이름을 얻는 방법

예를 들어 내 앱의 URL이 'http://freez-windy-1800.herokuapp.com'이면 내 clojure 코드에서 동적으로 가져올 수 있기를 원합니다.

내가 들어오는 요청을 살펴볼 수 있음을 알고 있지만 이상적으로 표현식을 한 번 평가하고 내가 할 수있는 변수에 값을 저장하는 '설정'을하고 싶습니다. 다음 (파이썬/Django 세계에서 오는, 나는 Clojure에서 settings.py 등가물을 생각하고있다)를 사용한다.

참고로 배포 할 코드는 https://github.com/rmanocha/cl-short입니다.

답변

5

당신은

heroku config:add BASE_IRI=http://freez-windy-1800.herokuapp.com 

에 의해에게 Heroku에서 환경 변수를 설정하고 Clojure의 그것을 다시 읽을 수

(defn- base-iri [] 
    (or (System/getenv "BASE_IRI") "http://localhost/")) 

Heroku가 이미 PORT은 당신이

(defn -main [] 
    (let [port (Integer. (or (System/getenv "PORT") 8080))] 
    (run-jetty #'app {:port port}))) 

작품을 사용할 수 있습니다 설정 나 다른 환경에서.

+0

방금 ​​PORT 부분을 이미 보았습니다. 그래서, 그것은 당신을 위해서도 효과가 있습니다. –

+0

굉장합니다, 고마워요. 그 덕분에, 고마워. –

2

일반적으로 Java 표준 라이브러리에서 InetAddress으로이 작업을 수행합니다.

(.getCanonicalHostName (java.net.InetAddress/getLocalHost)) 

그러나 DNS 조회는 수행하지 않습니다.

+0

이것은 작동하지 않습니다. Heroku에서 ('heroku run lein repl'을 사용하여) 나는 임의의 숫자를 얻습니다. localhost에서 로컬 IP를 얻습니다. –