我定义了一个与guide-started相关的环境变量,我的 mix.exs 是
defmodule Basic.Mixfile do
use Mix.Project
def project do
[app: :basic,
version: "0.0.1",
elixir: "~> 0.13.0-dev",
deps: deps,
env: [
dev: [foo: "bar"] ] ]
end
# Configuration for the OTP application
#
# Type `mix help compile.app` for more information
def application do
[ applications: [],
mod: { Basic, [] } ]
end
# List all dependencies in the format:
#
# { :foobar, git: "https://github.com/elixir-lang/foobar.git", tag: "0.1" }
#
# Type `mix help deps` for more examples and options
defp deps do
[]
end
end
然后我使用iex -S mix
或MIX_ENV=dev iex -S mix
启动项目,我希望使用:application.get_env(:basic, :foo)
获取环境变量,它转向:undefined
;并使用:application.get_all_env(:basic)
,它返回[included_applications: []]
,没有env
变量。我的问题是我应该如何获得环境价值?
答案 0 :(得分:9)
:env
不得在project
中指定,而应在应用程序中指定。
def application do
[ applications: [],
mod: { Basic, [] },
env: [foo: :bar] ]
end
然后您可以按以下方式访问它:
Application.get_env(:basic, :foo)
在这种情况下,不支持为特定MIX_ENV(如dev或prod)指定环境。这正是为什么:env
project
被弃用的原因。将两个键命名为:env
具有不同的行为是混淆的秘诀。 :)
答案 1 :(得分:2)
我认为当MIX_ENV为Mix.project[:foo]
时,dev
会返回定义的值(" bar")。但是,由于在v0.13.1中显示以下警告,可能不是推荐的方式。
"The :env key in Basic.Mixfile project configuration is deprecated"
如果它用于配置设置,https://github.com/phoenixframework/ex_conf也具有基于环境的配置功能。</ p>
答案 2 :(得分:1)
使用env = :application.get_env(:example, Mix.env)
。这将返回您在mix.exs文件中的:dev
键下定义的关键字列表。然后,您可以使用Keyword.get(env, :foo)
提取单个密钥。
答案 3 :(得分:1)
这可能对您的需求有些过分,但Avdi Grimm最近ported dotenv to Elixir。