Настройка Elixir Phoenix и использование переменных среды
У меня есть приложение Феникс, которое делает OAuth-вызов на github. Я хочу сохранить свои секретные ключи как переменные среды, чтобы не допустить их контроля версий.
Я создал файл с именем .env
где я определяю свой закрытый ключ:
export GITHUB_CLIENT_ID="891538_my_key_bf0055"
Я пытаюсь получить свой закрытый ключ в моем config.exs
файл, файл, отвечающий за настройку вашего приложения с помощью System.Config
,
config :ueberauth, Ueberauth.Strategy.Github.OAuth,
client_id: System.get_env("GITHUB_CLIENT_ID"),
client_secret: System.get_env("GITHUB_SECRET_ID")
Короче говоря, мой контроллер почти может рукопожатие с GitHub для запроса. Когда я делаю запрос на github для авторизации моего приложения, http://localhost:4000/auth/github
Я почти могу сделать запрос, и я вижу страницу 404 от GitHub. Я заметил, что URL не имеет client_id
хоть!
Мой маршрутизатор для доступа к обратному вызову
scope "/auth", Discuss do
pipe_through :browser # Use the default browser stack
# make request to github, google, fb
get "/:provider", AuthController, :request
get "/:provider/callback", AuthController, :callback
end
И то, что я получаю, это URL без value
https://github.com/login/oauth/authorize? client_id = & redirect_uri = http% 3A% 2F% 2Flocalhost% 3A4000% 2Fauth% 2Fgithub% 2Fcallback & response_type = code & scope = user% 2Cpublic_repo`
Если я не использую переменную среды в config.exs
и вместо того, чтобы использовать строковое значение, запрос работает как надо.
Как мне использовать переменные окружения в Фениксе?
4 ответа
При использовании выпусков Distillery, вы можете избежать использования System.get_env/1
изнутри config.exs
файлы, так как он будет хранить значение переменной среды во время сборки, а не во время выполнения.
в prod.exs
Конфигурация, вы можете использовать
config :ueberauth, Ueberauth.Strategy.Github.OAuth,
client_id: "${GITHUB_CLIENT_ID}",
client_secret: "${GITHUB_SECRET_ID}"
Затем сгенерируйте релиз с REPLACE_OS_VARS=true
переменная окружения установлена.
Вы не должны оборачивать client_id
строка с двойными кавычками. Напишите это как есть:
export GITHUB_CLIENT_ID=891538_my_key_bf0055
Прежде чем запускать свой сервер или IEx, не забудьте source .env
,
Если вы хотите, чтобы ваши ENV-переменные оставались видимыми только в процессе работы вашего приложения, вы можете поместить их в файл .env и запустить приложение с помощью
env $(cat .env | grep -v ^# | xargs) iex -S mix phoenix.server
Конечно, в рабочей среде вы можете попробовать какой-то более сложный механизм, но вышеприведенное работает нормально для простого случая использования /dev, и оно сообщит вам, правильно ли ваше приложение читает ENV var.
Для развития - при управлении iex -S mix phx.server
- вы можете установить переменные в .iex.exs
:
System.put_env(%{"GITHUB_CLIENT_ID" => "891538_my_key_bf0055",
"GITHUB_SECRET_ID" => "1234567890asdfghjkls"})