Не удается получить переменные среды в проекте Elixir

Я определил переменную среды, относящуюся к guide-started, моему миксу .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 нет. И мой вопрос: как мне получить значение для окружающей среды?


person jsvisa    schedule 30.04.2014    source источник


Ответы (4)


:env следует указывать не в project, а внутри приложения.

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

Затем вы можете получить к нему доступ как:

Application.get_env(:basic, :foo)

В этом случае нет поддержки для указания среды для конкретного MIX_ENV (например, dev или prod). Именно поэтому :env внутри project устарел. Наличие двух ключей с именем :env с разным поведением - это рецепт путаницы. :)

person José Valim    schedule 01.05.2014

Я думаю, что Mix.project[:foo] возвращает определенное значение ("бар"), когда MIX_ENV равно dev. Однако, поскольку следующее предупреждение отображается в версии 0.13.1, это может быть не рекомендуемый способ.

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

Если он используется для настройки конфигурации, https://github.com/phoenixframework/ex_conf имеет конфигурацию на основе среды особенности тоже.

person parroty    schedule 01.05.2014

Используйте 1_. Это вернет список ключевых слов, который вы определили для ключа :dev в вашем файле mix.exs. Затем вы можете использовать Keyword.get(env, :foo) для извлечения отдельных ключей.

person bitwalker    schedule 30.04.2014

Это может быть излишним для ваших нужд, но Авди Гримм недавно перенес dotenv на Elixir.

person alxndr    schedule 30.04.2014