【问题标题】:Starting a dependency based on a configuration argument in erlang基于 erlang 中的配置参数启动依赖项
【发布时间】:2014-07-19 04:18:26
【问题描述】:

我的某些应用程序依赖项仅在设置了给定参数时才使用。我需要知道启动这些依赖项的最佳方法是什么。我正在使用 Erlang R14B04,无法使用其他版本。

我有两个选择。第一个:

%% file myapp.erl
start() ->
    dep1:start(),
    dep2:start(),
    application:start(myapp),
    case application:get_env(myapp, use_app3) ->
        true ->
            dep3:start()
        _ ->
            ok
    end.

start(Type, StartArgs) ->
    supervisor:start_link({local, ?MODULE}, ?MODULE, []).

第二种选择:

%% file myapp.erl
start() ->
    dep1:start(),
    dep2:start(),
    application:start(myapp).

start(Type, StartArgs) ->
    case application:get_env(myapp, use_app3) ->
        true ->
            dep3:start()
        _ ->
            ok
    end.
    supervisor:start_link({local, ?MODULE}, ?MODULE, []).

哪一种是解决问题的最佳方法?

【问题讨论】:

  • 一些模块?或一些应用程序?因为模块随时可用,无需任何启动。模块不是进程。
  • 应用程序。我编辑了 OP。

标签: erlang erlang-otp


【解决方案1】:

我会说第一个是更好的选择。 start/0 似乎关心启动相关应用程序,而 start/2 启动当前应用程序的监督树。

这是两个独立的问题,因此将条件逻辑放在 start/2 中似乎会有点弄脏您的代码。

我注意到在第一个示例中,您在自己的应用之后启动了第三个应用。在第二个示例中,您将在您自己的应用程序之前启动第三个应用程序。您的应用程序需要先发生哪个?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 2015-11-03
    • 2014-04-02
    • 2016-08-01
    • 1970-01-01
    • 2017-07-07
    相关资源
    最近更新 更多