Dev.ex Elixir Phoenix中的System.get_env

System.get_env in dev.ex Elixir Phoenix

我试图在我的dev.exs文件中获取env文件值。 但他们的确是零。

1
2
3
config :extractor, :mailgun,
  domain: System.get_env['MAILGUN_DOMAIN'],
  key: System.get_env['MAILGUN_KEY']

当我去iex时,它们将作为实际值出现。 在我的应用mix.exs中,我添加了dotenv

1
2
3
4
5
  def application do
    [mod: {Extractor, []},
     applications: [:phoenix, :phoenix_pubsub, :phoenix_html, :cowboy, :logger, :gettext,
                    :phoenix_ecto, :postgrex, :tzdata, :httpoison, :dotenv, :quantum]]
  end

它没有指定任何环境。 它只是在应用程序列表中。

我也尝试过这种方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  def application do
    [mod: {Extractor, []},
     applications: app_list(Mix.env)]
  end


  defp app_list(:dev), do: [:dotenv | app_list]
  defp app_list(:test), do: [:dotenv | app_list]
  defp app_list(_), do: app_list
  defp app_list, do: [
    :phoenix,
    :phoenix_pubsub,
    :phoenix_html,
    :cowboy,
    :logger,
    :gettext,
    :phoenix_ecto,
    :postgrex,
    :tzdata,
    :httpoison,
    :dotenv,
    :quantum
  ]

但是没有运气......任何帮助?


我不认为你需要使用dotenv(如他们的github页面https://github.com/avdi/dotenv_elixir所述,Elixir有一个非常好的系统来处理env配置)。

试试这个并告诉我它是否适合你:

  • 在项目的根目录创建一个简单的.env文件,在该文件中导出env变量:
  • .ENV

    1
    2
    export MAILGUN_DOMAIN=mailgundomain.com
    ...
  • 在启动服务器或iex之前获取它:source .env
  • 访问dev.exs中定义的env变量,如下所示:
  • Application.get_env(:extractor, :mailgun)[:domain]

    并使用双引号而不是单引号。从Elixir的角度来看,'foo'和"foo"是两回事。

    希望能帮助到你 !


    查看https://github.com/avdi/dotenv_elixir上的警告并参考https://stackoverflow.com/a/20909045/111021,我在~/.bashrc中想出了这个:

    1
    2
    alias mix='env $([ -f .env ] && cat .env | xargs) mix'
    alias iex='env $([ -f .env ] && cat .env | xargs) iex'

    这适用于常见用例mix phoenix.serveriex -S mix。如果你的dotenv有复杂的值,如引号或空格,你可能需要进一步调整命令。

    警告:如果您使用类似mix release https://github.com/bitwalker/distillery的东西,您可能会将env vars混合到包中。


    您应该使用双引号strings作为键,而不是单引号列表。

    1
    2
    3
    4
    5
    System.get_env["LOGNAME"]
    >"patnowak"

    System.get_env['LOGNAME']
    > nil