2014-09-18 2 views
1

Я пытаюсь развернуть приложение Elixir/Phoenix с помощью exrm. Это отлично работает, за исключением того, что я не могу прочитать некоторые записи конфигурации, определенные в config/config.exs при запуске приложения через выпуск «двоичный».Невозможно прочитать записи конфигурации phoenix после создания выпуска с помощью exrm

Мои 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 

в rel/my_app/releases/0.0.1/ Сформированный sys.config выглядит следующим образом :

[{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.

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

ответ

2

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

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

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

+0

О, я пропустил эту часть в документах :-(Теперь это снова имеет смысл. Thx много! –

 Смежные вопросы

  • Нет связанных вопросов^_^