2012-05-21 19 views
9

में वर्तमान होस्टनाम कैसे प्राप्त करें I Heroku पर क्लोजर/नोयर ऐप्स को तैनात करने के साथ खेल रहा हूं और मुझे अपना ऐप अधिकतर काम कर रहा है। हालांकि, मुझे एक अंतिम टुकड़ा है जो हेरोोकू पर तैनात किए जाने पर मेरे ऐप के होस्टनाम को समझना है। आदर्श रूप से, मैं इसे हार्ड-कोडिंग के बजाय गतिशील रूप से करना चाहता हूं।हेरोकू

तो, उदाहरण के लिए, मेरे ऐप का यूआरएल 'http://freez-windy-1800.herokuapp.com' है, तो मैं इसे अपने क्लोजर कोड में गतिशील रूप से प्राप्त करने में सक्षम होना चाहता हूं।

मुझे पता है कि मैं इसे समझने के आने वाले अनुरोध को देख सकता हूं, लेकिन आदर्श रूप में, मैं कुछ प्रकार की 'सेटिंग' रखना चाहता हूं जहां मैं एक बार अभिव्यक्ति का मूल्यांकन करता हूं और एक वैरिएबल में मूल्य को सहेजता हूं जिसे मैं कर सकता हूं फिर उपयोग करें (पायथन/Django दुनिया से आ रहा है, मैं क्लोजर में 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 पहले से ही सेट पोर्ट आप के लिए उपयोग कर सकते हैं

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

वर्क्स मुझे विभिन्न वातावरण में।

+0

मैंने अभी देखा है कि आप पहले से ही पोर्ट भाग करते हैं। तो, यह भी आपके लिए काम करना चाहिए। –

+0

बहुत बढ़िया, धन्यवाद। यह बहुत अच्छा काम करता है, धन्यवाद। –

2

आप आमतौर पर जावा मानक पुस्तकालय से InetAddress के साथ ऐसा करेंगे।

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

हालांकि, यह DNS लुकअप नहीं करता है।

+0

यह काम नहीं प्रतीत होता है। हेरोकू पर ('हेरोकू रन लीन प्रतिलिपि' का उपयोग करके) मुझे कुछ यादृच्छिक संख्याएं मिलती हैं। स्थानीयहोस्ट पर, मुझे अपना स्थानीय आईपी मिलता है। –