Настройка 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"})
Другие вопросы по тегам