如何根据配置文件设置环网端口
How to set ring port based on profile
我有一个 clojure ring 项目,我希望能够根据配置文件设置端口号。目前我有来自 project.clj
的以下片段
: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
命令的解决方案持开放态度,但我对如何使任何方法起作用感到困惑。
您不需要环境。当您需要访问源代码中的配置变量时使用它。在 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)并且它有效。
替代方案:如果它们是不同的机器,您可以使用 OS 的环境变量:
:ring {:handler project.handler/webServer
:init project.init/initialize
:port ~(System/getenv "RING_PORT")}
然后在您的开发机器上将 RING_PORT 设置为 8080,在生产机器上设置为 80。
$ export RING_PORT=80
替代版本似乎无法按说明工作。我得到异常 "java.lang.String cannot be cast to java.lang.Number"。显然,我们必须明确地将值环境变量解析为整数,但随后我们还必须捕获可能的错误。适合我的代码
:port ~(try
(Integer/valueOf
(System/getenv "RING_PORT"))
(catch Exception e 3000))
我有一个 clojure ring 项目,我希望能够根据配置文件设置端口号。目前我有来自 project.clj
的以下片段: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
命令的解决方案持开放态度,但我对如何使任何方法起作用感到困惑。
您不需要环境。当您需要访问源代码中的配置变量时使用它。在 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)并且它有效。
替代方案:如果它们是不同的机器,您可以使用 OS 的环境变量:
:ring {:handler project.handler/webServer
:init project.init/initialize
:port ~(System/getenv "RING_PORT")}
然后在您的开发机器上将 RING_PORT 设置为 8080,在生产机器上设置为 80。
$ export RING_PORT=80
替代版本似乎无法按说明工作。我得到异常 "java.lang.String cannot be cast to java.lang.Number"。显然,我们必须明确地将值环境变量解析为整数,但随后我们还必须捕获可能的错误。适合我的代码
:port ~(try
(Integer/valueOf
(System/getenv "RING_PORT"))
(catch Exception e 3000))