2012-05-21 31 views
9

Estoy jugando con la implementación de aplicaciones Clojure/Noir en Heroku y tengo mi aplicación en su mayoría funcionando. Sin embargo, una última pieza que necesito es averiguar el nombre de host de mi aplicación cuando se despliega en Heroku. Idealmente, quiero hacer esto de forma dinámica en lugar de codificarlo con fuerza.Cómo obtener el nombre de host actual en Heroku

Por lo tanto, si, por ejemplo, la URL de mi aplicación es 'http://freez-windy-1800.herokuapp.com', quiero poder obtenerla dinámicamente dentro de mi código de clojure.

Sé que puedo ver la solicitud entrante para resolver esto, pero idealmente, me gustaría tener algún tipo de 'configuración' donde evalúo una expresión una vez y guardo el valor en una variable que pueda luego uso (viniendo del mundo de Python/Django, estoy pensando en el equivalente settings.py en Clojure).

Como referencia, el código que estoy implementando está disponible en https://github.com/rmanocha/cl-short.

Respuesta

5

Se podría establecer una variable de entorno en el Heroku por

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

y leer de nuevo en Clojure

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

Heroku ya establece el puerto se puede utilizar

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

Obras para yo en diferentes ambientes.

+0

Acabo de ver que ya hace la parte PORT. Por lo tanto, debería funcionar para usted también. –

+0

Impresionante, gracias. Eso funciona genial, gracias. –

2

Normalmente haría esto con InetAddress de la biblioteca estándar de Java.

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

Esto, sin embargo, no hace una búsqueda de DNS.

+0

Esto no parece funcionar. En Heroku (usando 'heroku run lein repl') obtengo algunos números aleatorios. En localhost, obtengo mi IP local. –

Cuestiones relacionadas