2012-05-21 18 views
9

Używam aplikacji Clojure/Noir na Heroku, a moja aplikacja działa najlepiej. Jednak jednym z ostatnich elementów, których potrzebuję, jest znalezienie nazwy hosta mojej aplikacji po wdrożeniu na Heroku. Idealnie, chcę to zrobić dynamicznie, zamiast twardo go kodować.Jak uzyskać bieżącą nazwę hosta w Heroku?

Tak więc, jeśli na przykład adres URL mojej aplikacji to "http://freez-windy-1800.herokuapp.com", chcę móc dynamicznie uzyskać to w ramach mojego kodu clojure.

Wiem, że mogę przyjrzeć się nadchodzącej prośbie, aby to zrozumieć, ale najlepiej, chciałbym mieć jakieś "ustawienie", w którym oceniam wyrażenie raz i zapiszę wartość w zmiennej, którą mogę następnie użyj (pochodzącego ze świata Python/Django, myślę o równoważniku settings.py w Clojure).

Kod, który wdrażam, jest dostępny pod adresem https://github.com/rmanocha/cl-short.

Odpowiedz

5

Można ustawić zmienną środowiskową w Heroku przez

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

i odczytać go z powrotem w Clojure

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

Heroku już ustawia port można użyć

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

pracuje dla ja w różnych środowiskach.

+0

Właśnie zobaczyłem, że już robisz część PORT. Powinno to również działać dla ciebie. –

+0

Niesamowite, dzięki. To działa świetnie, dzięki. –

2

Zazwyczaj robisz to z InetAddress ze standardowej biblioteki Java.

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

To jednak nie sprawdza DNS.

+0

To nie działa. Na Heroku (przy użyciu 'repliki heroku run lein') otrzymuję losowe liczby. Na localhost, otrzymuję mój lokalny adres IP. –

Powiązane problemy