Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 如何根据配置文件设置环形端口_Clojure_Leiningen_Ring - Fatal编程技术网

Clojure 如何根据配置文件设置环形端口

Clojure 如何根据配置文件设置环形端口,clojure,leiningen,ring,Clojure,Leiningen,Ring,我有一个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

我有一个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权限,而不是我想为dev运行做的事情。我曾尝试(盲目地)将环形端口放入uberjar配置文件,但没有成功。我还尝试使用根据环境变量设置环形端口,但也不起作用


我对一种将命令行参数传递给
java-jar[…]-standalone.jar
命令的解决方案持开放态度,但我一直在研究如何使用任何方法。

您不需要环境。当您需要访问源代码中的配置变量时,可以使用它。在
project.clj
中,您可以直接执行以下操作:

:profiles{:dev{:jvm opts[“-Dproperty file=dev.properties”]
:环{:端口8080}
:ci{:jvm opts[“-Dproperty file=ci.properties”]
:环{:端口80}
:uberjar{:aot:all
:环{:端口80}})
我已经对此进行了测试(没有
jvm选项,端口是8081而不是80),它可以正常工作

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

:ring{:handler项目.handler/webServer
:init project.init/initialize
:port~(System/getenv“RING\u port”)}
然后在dev机器上将RING_PORT设置为8080,在生产机器上将其设置为80

$export-RING\u-PORT=80

替代版本似乎不符合规定。我得到异常“java.lang.String不能转换为java.lang.Number”。显然,我们必须显式地将value环境变量解析为整数,但是我们还必须捕获可能的错误。适合我的代码

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

这对我很管用。我意识到,即使在运行
环uberjar
目标时,我仍然在使用“dev”配置文件。这是令人困惑的部分。我必须更改添加带有配置文件ci的
,以设置正确的端口。