Не удается прочитать записи конфигурации Phoenix после создания выпуска с помощью exrm
Я пытаюсь развернуть приложение Elixir/Phoenix с помощью exrm. Это прекрасно работает, за исключением того, что я не могу прочитать некоторые записи конфигурации, определенные в config/config.exs
при запуске приложения через релиз "бинарный".
мой config/config.exs
блокировки вроде этого (я убрал несколько строк для ясности):
use Mix.Config
config :phoenix, RestProxy.Router,
port: System.get_env("PORT")
# ...
config :logger,
backends: [:console, Logjam.LoggerBackend]
# ...
config :logjam, :forwarder,
app_name: "profileproxy",
enabled: false
Я также сгенерировал conform
Конфиг через
mix conform.new
mix conform.configure
и оставил их без изменений.
Если я построю это через mix release
, начни с ./rel/my_app/bin/my_app start
и подключиться к удаленной консоли, я могу прочитать некоторые записи конфигурации, но не logjam один:
> ./rel/rest_proxy/bin/rest_proxy remote_console
Erlang/OTP 17 [erts-6.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernelpoll:false] [dtrace]
Interactive Elixir (1.0.0) - press Ctrl+C to exit (type h() ENTER for help)
iex(my_app@127.0.0.1)1> Application.get_env(:logger, :backends)
[:console, Logjam.LoggerBackend]
iex(my_app@127.0.0.1)2> Application.get_env(:logjam, :forwarder)
nil
Сгенерированный sys.config
в rel/my_app/releases/0.0.1/
выглядит так:
[{sasl,[{errlog_type,error}]},
{phoenix,
[{'Elixir',
[{'MyApp',
[{'Router',
[{cookies,true},
{debug_errors,true},
{host,<<"localhost">>},
{port,4000},
{session_key,<<"_rest_proxy_key">>},
{session_secret,<<"snip">>},
{ssl,false}]}]}]},
{'Elixir.MyApp.Router',
[{port,nil},
{ssl,false},
{host,<<"example.com">>},
{cookies,true},
{session_key,<<"_rest_proxy_key">>},
{session_secret,<<"snip">>}]},
{code_reloader,[{enabled,true}]}]},
{logger,
[{backends,[console,'Elixir.Logjam.LoggerBackend']},
{format,<<"$time $metadata[$level] $message">>},
{handle_otp_reports,true},
{handle_sasl_reports,true},
{metadata,[request_id]}]},
{logjam,[{forwarder,[{app_name,<<"profileproxy">>},{enabled,false}]}]}].
Я использую эликсир 1.0.0, Феникс 0.4.1 и exrm 0.14.9.
Любые идеи / советы, почему я не могу прочитать конфиг?
1 ответ
Я бы предположил, что это потому, что нет приложения под названием logjam
загружен в ваш релиз. Цитировать документы Erlang для :application.get_env
:
Если указанное приложение не загружено или если процесс, выполняющий вызов, не принадлежит ни одному приложению, функция возвращает []
В вашем случае вы видите ноль, потому что дан пустой список ключевых слов, Application.get_env
не может найти ключ по имени :forwarder
и так возвращает ноль по умолчанию.