Не удается прочитать записи конфигурации 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 и подключимся к удаленной консоли, я смогу прочитать некоторые записи в конфиге, но не тупиковую:

> ./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([email protected])1> Application.get_env(:logger, :backends)
[:console, Logjam.LoggerBackend]
iex([email protected])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}]}]}].

Я использую elixir 1.0.0, phoenix 0.4.1 и exrm 0.14.9.

Любые идеи/подсказки, почему я не могу прочитать конфигурацию?


person Mark Schmidt    schedule 18.09.2014    source источник


Ответы (1)


Я предполагаю, что это связано с тем, что в вашем выпуске не загружено приложение с именем logjam. Чтобы процитировать документы Erlang для :application.get_env:

Если указанное приложение не загружено или если процесс, выполняющий вызов, не принадлежит ни одному приложению, функция возвращает []

В вашем случае вы видите nil, потому что с учетом пустого списка ключевых слов Application.get_env не может найти ключ по имени :forwarder и поэтому по умолчанию возвращает nil.

person bitwalker    schedule 18.09.2014
comment
О, я пропустил эту часть в документах :-(. Теперь это снова имеет смысл. Большое спасибо! - person Mark Schmidt; 19.09.2014