【问题标题】:Can't get the environment variables in Elixir project无法获取 Elixir 项目中的环境变量
【发布时间】:2014-06-16 23:38:19
【问题描述】:

我定义了一个与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 mixMIX_ENV=dev iex -S mix启动项目,我想用:application.get_env(:basic, :foo)获取环境变量,它转向:undefined;并使用:application.get_all_env(:basic),它返回[included_applications: []],没有env 变量。我的问题是我应该如何获得环境价值?

【问题讨论】:

    标签: elixir elixir-mix


    【解决方案1】:

    :env 不得在 project 中指定,而应在应用程序中指定。

    def application do
      [ applications: [],
        mod: { Basic, [] },
        env: [foo: :bar] ]
    end
    

    然后你可以访问它:

    Application.get_env(:basic, :foo)
    

    在这种情况下,不支持为特定的 MIX_ENV(如 dev 或 prod)指定环境。这正是不推荐使用 project 内的 :env 的原因。将两个键命名为 :env 并具有不同的行为会造成混淆。 :)

    【讨论】:

      【解决方案2】:

      我认为当 MIX_ENV 为 dev 时,Mix.project[:foo] 返回定义的值(“bar”)。但是,由于 v0.13.1 显示以下警告,因此可能不是推荐的方式。

      "The :env key in Basic.Mixfile project configuration is deprecated" 
      

      如果用于配置设置,https://github.com/phoenixframework/ex_conf也有基于环境的配置功能。

      【讨论】:

        【解决方案3】:

        这可能对您的需求有点过头了,但最近 Avdi Grimm ported dotenv to Elixir

        【讨论】:

          【解决方案4】:

          使用env = :application.get_env(:example, Mix.env)。这将返回您在 mix.exs 文件中的 :dev 键下定义的关键字列表。然后,您可以使用 Keyword.get(env, :foo) 提取各个密钥。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-10-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-09-16
            • 1970-01-01
            • 2022-10-23
            相关资源
            最近更新 更多