设置&在凤凰应用程序

时间:2017-07-06 12:56:47

标签: elixir phoenix-framework

我是凤凰框架的新手,正在寻找一种在应用程序中设置环境变量的方法。我发现的一种方法是here

但是,我不喜欢这种方式,因为每当我重新启动应用程序时都需要输入source .env

我尝试在prod.secret.exs中设置ENV变量,如下所示:

config :oauth,
  GITHUB_CLIENT_ID: "(CLIENT ID)",
  GITHUB_CLIENT_SECRET: "(SECRET)"

我尝试以下列方式检索ENV变量:

 config :ueberauth, Ueberauth.Strategy.Github.OAuth,
   client_id: System.get_env("GITHUB_CLIENT_ID"),
   client_secret: System.get_env("GITHUB_CLIENT_SECRET")

但是,当我使用mix phoenix.server运行服务器时,它会给我一个错误,如下所示,我不确定它的真正含义:

You have configured application :oauth in your configuration
file, but the application is not available.

This usually means one of:

1. You have not added the application as a dependency in a mix.exs file.

2. You are configuring an application that does not really exist.

Please ensure :oauth exists or remove the configuration.

我正在寻找一种方法将ENV变量保存在项目本身的隐藏文件中,以便随时可以检索它。有人能告诉我保存ENV变量并在Phoenix应用程序中检索它们的正确方法是什么?

3 个答案:

答案 0 :(得分:3)

您要做的事情有两个主要的故障:

首先,您正在尝试指示mix配置oauth OTP应用程序,而您需要的是配置自己的应用程序:

config :my_app, :oauth,
  github_client_id: "(CLIENT ID)",
  github_client_secret: "(SECRET)"

现在,您可以在主配置中执行以下操作:

config :ueberauth, Ueberauth.Strategy.Github.OAuth,
   client_id: Application.get_env(:my_app, :oauth)[:github_client_id],
   client_secret: Application.get_env(:my_app, :oauth)[:github_client_secret]

第二个小故障是GITHUB_CLIENT_ID是一个原子,你最近试图以字符串形式访问它。通常,不应该使用以大写字母开头的原子名称,因为它们保留了模块名称。

另一方面,您可能仍然使用System.get_env/2(与config.ex一起使用),假设这些值以前 put 位于环境中:

prod.secret.exs (因为它仍然是普通的Elixir)

System.put_env("GITHUB_CLIENT_ID", "(CLIENT ID)")
System.put_env("GITHUB_CLIENT_SECRET", "(CLIENT SECRET)")

答案 1 :(得分:2)

我找到了另一个例子

1.-在主文件夹中创建文件.env

2.-在.env文件中添加环境变量

# example:
# MyApp/.env file
export GITHUB_CLIENT_ID="testID"
export GITHUB_SECRET_CLIENT_ID="testSecretID"

3.-运行source .env,每次对其进行修改后,再次执行该命令,也许也重新启动

4.-什么是真正的重要-不要忘记将机密文件添加到MyApp/.gitignore

# add this at the end
/.env

5.-运行phoenix服务器mix phx.servermix phoenix.server

您可以使用

进行测试
iex -S mix phoenix.server

iex> System.get_env("GITHUB_CLIENT_ID")
"testID"

答案 2 :(得分:1)

当启动phoenix并使用环境变量(System.get_env("GITHUB_CLIENT_ID"))时,你需要做这样的事情来传入变量:

GITHUB_CLIENT_ID=12345 GITHUB_CLIENT_SECRET=67890 mix phoenix.server