12

Heroku に Clojure/Noir アプリをデプロイして遊んでいますが、アプリはほとんど機能しています。ただし、最後に必要なのは、Heroku にデプロイされたときのアプリのホスト名を把握することです。理想的には、これをハードコーディングするのではなく、動的に実行したいと考えています。

たとえば、私のアプリの URL が「http://freez-windy-1800.herokuapp.com」の場合、これを clojure コード内で動的に取得できるようにしたいと考えています。

着信リクエストを見てこれを理解できることはわかっていますが、理想的には、式を一度評価し、その値を変数に保存してから使用できるような「設定」が必要です( Python/Django の世界ではsettings.py、Clojure で同等のものを考えています)。

参考までに、私がデプロイしているコードはhttps://github.com/rmanocha/cl-shortで入手できます。

4

3 に答える 3

7

Heroku で環境変数を設定するには、次のようにします。

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

それをClojureで読み返す

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

Heroku は、使用できる PORT を既に設定しています

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

さまざまな環境で機能します。

于 2012-05-22T10:36:29.700 に答える
3

通常InetAddress、Java 標準ライブラリからこれを行います。

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

ただし、これは DNS ルックアップを行いません。

于 2012-05-21T14:04:56.703 に答える
-1

ホスト名を取得する 3 つの方法。お好みでご利用ください。

(ns service.get-host-name
  (require [clojure.java.shell :as shell]
           [clojure.string :as str])
  (:import [java.net InetAddress]))

(defn- hostname []
  (try
    (-> (shell/sh "hostname") (:out) (str/trim))
    (catch Exception _e
      (try
        (str/trim (slurp "/etc/hostname"))
        (catch Exception _e
          (try
            (.getHostName (InetAddress/getLocalHost))
            (catch Exception _e
              nil)))))))
于 2018-09-21T09:04:03.403 に答える