2012-05-21 16 views
9

Ich spiele gerade mit der Bereitstellung von Clojure/Noir-Apps auf Heroku und ich habe meine App größtenteils funktioniert. Ein letztes Stück, das ich brauche, ist jedoch, den Hostnamen meiner App herauszufinden, wenn sie auf Heroku bereitgestellt wird. Im Idealfall möchte ich das dynamisch tun, anstatt es hart zu codieren.Wie bekomme ich den aktuellen Hostnamen in Heroku?

Wenn also beispielsweise die URL meiner App 'http://freez-windy-1800.herokuapp.com' lautet, möchte ich diese dynamisch innerhalb meines Clojure-Codes abrufen können.

Ich weiß, dass ich die eingehende Anfrage betrachten kann, um herauszufinden, aber idealerweise möchte ich eine Art 'Einstellung' haben, wo ich einen Ausdruck einmal auswerte und speichern Sie den Wert in einer Variablen, die ich kann dann benutze (kommt aus der Python/Django-Welt, ich denke an die Entsprechung in Clojure).

Als Referenz ist der Code, den ich bereitstellen, unter https://github.com/rmanocha/cl-short verfügbar.

Antwort

5

Sie könnten eine Umgebungsvariable in Heroku gesetzt von

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

und es zurück in Clojure lesen

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

Heroku schon setzt der PORT Sie

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

Works verwenden können für Ich in verschiedenen Umgebungen.

+0

Ich habe gerade gesehen, dass du schon den PORT Teil machst. Also sollte es auch für dich funktionieren. –

+0

Super, danke. Das funktioniert super, danke. –

2

Sie würden dies normalerweise mit InetAddress aus der Java-Standardbibliothek tun.

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

Dies führt jedoch keine DNS-Suche durch.

+0

Dies scheint nicht zu funktionieren. Auf Heroku (mit 'heroku run lein repl') bekomme ich einige Zufallszahlen. Auf localhost bekomme ich meine lokale IP. –

Verwandte Themen