【问题标题】:How to set ring port based on profile如何根据配置文件设置环端口
【发布时间】:2015-03-12 18:45:43
【问题描述】:

我有一个 clojure ring 项目,我希望能够根据配置文件设置端口号。目前我有来自 project.clj 的以下 sn-p

:plugins [[lein-ring "0.8.13"]]
:ring {:handler project.handler/webServer
       :init    project.init/initialize
       :port    80}
:profiles {:dev        {:jvm-opts ["-Dproperty-file=dev.properties"]}
           :ci         {:jvm-opts ["-Dproperty-file=ci.properties"]}
           :uberjar    {:aot :all}})

我想做的是将开发环境的端口设置为 8080,然后将生产环境的端口设置为 80。我会一直在端口 80 上运行,但这需要 root 权限,而不是我想为开发运行做的事情。我曾尝试(盲目地)将环端口放入 uberjar 配置文件中,但这没有用。我还尝试使用environ project根据环境变量设置环端口,但也没有用。

我对将命令行参数传递给java -jar [...]-standalone.jar 命令的解决方案持开放态度,但我一直不知道如何让任何方法发挥作用。

【问题讨论】:

    标签: clojure leiningen ring


    【解决方案1】:

    您不需要环境。当您需要访问源代码中的配置变量时使用它。在project.clj 你可以直接这样做:

    :profiles {:dev        {:jvm-opts ["-Dproperty-file=dev.properties"]
                            :ring {:port 8080}}
               :ci         {:jvm-opts ["-Dproperty-file=ci.properties"]
                            :ring {:port 80}}
               :uberjar    {:aot :all
                            :ring {:port 80}}})
    

    我已经对此进行了测试(没有 jvm-opts 和端口 8081 而不是 80)并且它可以工作。

    替代方案:如果它们是不同的机器,您可以使用操作系统的环境变量:

    :ring {:handler project.handler/webServer
           :init    project.init/initialize
           :port    ~(System/getenv "RING_PORT")}
    

    然后在您的开发机器上将 RING_PORT 设置为 8080,在生产机器上设置为 80。

    $ export RING_PORT=80
    

    【讨论】:

    • 这对我有用。我意识到即使在运行ring uberjar 目标时我仍在使用“dev”配置文件。那是令人困惑的部分。我必须更改添加 with-profile ci 才能设置正确的端口。
    【解决方案2】:

    似乎替代版本不像所述那样工作。我收到异常“java.lang.String 无法转换为 java.lang.Number”。显然我们必须将 value 环境变量显式解析为整数,但是我们还必须捕获可能的错误。适合我的代码

    :port ~(try
                  (Integer/valueOf
                    (System/getenv "RING_PORT"))
                  (catch Exception e 3000))
    

    【讨论】:

      猜你喜欢
      • 2019-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-11
      • 1970-01-01
      • 2020-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多