2014-09-18 42 views
1

我正在嘗試使用exrm配置我的Elixir/Phoenix應用程序。這工作正常,但我無法讀取config/config.exs中定義的某些配置條目,當通過「binary」版本啓動應用程序時。使用exrm創建發行版後無法讀取phoenix配置條目

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 

我也通過

mix conform.new 
mix conform.configure 

產生的conform配置和給他們留下不變。

如果我通過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

如果指定的應用程序未裝載,或者如果執行呼叫過程 不屬於任何應用程序,函數 返回[]

在你的情況,你會看到零,因爲給出一個空的關鍵字列表,Application.get_env無法找到一個名稱爲:forwarder的密鑰,所以默認返回nil。

+0

哦,我錯過了文檔中的那一部分:-(。現在它再次完全理解,Thx很多! – 2014-09-19 06:03:03

相關問題