我是凤凰框架的新手,正在寻找一种在应用程序中设置环境变量的方法。我发现的一种方法是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应用程序中检索它们的正确方法是什么?
答案 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.server
或mix 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