无法在Leiningen项目.clj文件中使用environ访问环境变量

16

我正在尝试使用environ来访问在我的project.clj的:dev配置文件中指定的环境变量。这似乎是设置不同配置选项的不错方式,但我似乎无法使其工作。我的project.clj条目如下:

:profiles
{:dev {:dependencies [[javax.servlet/servlet-api "2.5"]
                      [ring-mock "0.1.5"]]
       :env {:foo "FOO" :bar "BAR"}}}

如果我运行 lein repl 并在命名空间中输入(使用 in-ns )我的项目, environ.core/env 只返回nil:

如果我运行 lein repl 并在命名空间中输入(使用 in-ns )我的项目,environ.core/env 只会返回nil

(environ.core/env :foo)
nil

在 .lein/profiles.clj 文件中为 :user 配置添加 :env 条目也无法生效。我做错了什么?


如果你运行 (System/getenv),你是否会看到 "FOO",或者 "foo" 或 ":foo" 作为其中任何一个键?例如,我注意到 (env.core/env :pwd) 返回我的环境中 "PWD" 键所引用的值。 - noisesmith
@noisesmith 嗯,我可以使用environ获取环境变量,比如PATH,但是在我的defproject:profiles下定义的变量似乎无法识别。不,我没有看到任何关于foo的变化。 - ChrisM
如果environ可以获取其他环境变量,那么这不是一个environ的问题,而是一个leiningen的问题。很可能你没有正确地添加环境变量。 - noisesmith
@noisesmith 这正是我想的,但我非常确定我是正确的。请参考这里的被接受答案。 - ChrisM
1个回答

20

好的,这只是需要仔细阅读文档的情况。 :) 要访问在项目映射中指定的环境变量,您需要使用 lein-environ 插件。像这样添加它:

好的,这只是需要仔细阅读文档的情况。 :) 要访问在项目映射中指定的环境变量,您需要使用 lein-environ 插件。像这样添加它:

:plugins [[lein-environ "0.4.0"]]

那个行得通。但文档里很容易忽略这点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接