2012-05-21 35 views
9

Tôi đang phát xung quanh với việc triển khai các ứng dụng Clojure/Noir trên Heroku và tôi đã có ứng dụng của mình hoạt động chủ yếu. Tuy nhiên, một phần cuối cùng tôi cần là tìm ra tên máy chủ của ứng dụng của tôi khi được triển khai trên Heroku. Lý tưởng nhất, tôi muốn làm điều này tự động thay vì mã hóa cứng nó.Cách lấy tên máy chủ hiện tại trong Heroku

Vì vậy, ví dụ: URL của ứng dụng của tôi là 'http://freez-windy-1800.herokuapp.com', tôi muốn có thể tự động lấy mã này trong mã clojure của mình.

Tôi biết rằng tôi có thể xem yêu cầu đến để tìm ra điều này, nhưng lý tưởng, tôi muốn có một số loại 'thiết lập', nơi tôi đánh giá một biểu thức một lần và lưu giá trị trong một biến mà tôi có thể sau đó sử dụng (đến từ thế giới Python/Django, tôi đang nghĩ đến tương đương settings.py trong Clojure).

Để tham khảo, mã tôi đang triển khai có sẵn tại https://github.com/rmanocha/cl-short.

Trả lời

5

Bạn có thể thiết lập một biến môi trường trong Heroku bởi

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

và đọc nó trở lại trong Clojure

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

Heroku đã đặt PORT bạn có thể sử dụng

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

trình cho tôi trong các môi trường khác nhau.

+0

Tôi chỉ thấy rằng bạn đã làm phần PORT. Vì vậy, nó cũng làm việc cho bạn. –

+0

Tuyệt vời, cảm ơn. Điều đó hoạt động tuyệt vời, cảm ơn. –

2

Bạn thường làm điều này với InetAddress từ thư viện chuẩn Java.

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

Điều này, tuy nhiên, không thực hiện tra cứu DNS.

+0

Điều này dường như không hoạt động. Trên Heroku (sử dụng 'heroku run lein repl') Tôi nhận được một số số ngẫu nhiên. Trên localhost, tôi nhận được IP địa phương của mình. –

Các vấn đề liên quan