在 Erlang 应用程序中加载依赖项的代码路径的正确方法是啥。

Posted

技术标签:

【中文标题】在 Erlang 应用程序中加载依赖项的代码路径的正确方法是啥。【英文标题】:What is the correct way to load the code paths of dependencies in an Erlang application.在 Erlang 应用程序中加载依赖项的代码路径的正确方法是什么。 【发布时间】:2016-10-27 04:40:08 【问题描述】:

所以假设我有一个 rebar 应用程序结构并且在 deps 文件夹中我有许多依赖项,有些是库应用程序,有些是需要启动的应用程序。我通常这样做:

start(_Type, _Args) ->
   code:add_path("../deps/depapp/ebin"),
   ok, _ = application:ensure_all_started(depapp),

这是在开发环境中执行此操作的正确方法吗?在生产中怎么样?

【问题讨论】:

【参考方案1】:

您使用的不一定是错误的方式,但可能会暴露一些问题。例如,通过这种方式,您无法选择启动必须在您的应用程序之前启动的依赖应用程序。

因此,对于 loadingstarting 依赖的 OTP 应用程序或库,还有其他替代方案。

1) 使用erl 命令行标志:

erl -pa ebin deps/*/ebing -s your_dep_app start -s your_app start

2) 使用包管理器进行处理:

例如,作为包管理器的 Rebar 可以为您处理。您需要在 rebar.config 中指定您的应用程序依赖项,然后为 Rebar2 发出 rebar get-deps 或为 Rebar3 发出 rebar3 compile。以下是 Rebar3 的示例配置文件的 sn-p:

deps,[
  %% Packages
  rebar,
  rebar,"1.0.0",
  rebar, pkg, rebar_fork, % rebar app under a different pkg name
  rebar, "1.0.0", pkg, rebar_fork,
  %% Source Dependencies
  rebar, git, "git://github.com/erlang/rebar3.git",
  rebar, git, "http://github.com/erlang/rebar3.git"].

有关 Rebar 依赖项管理器的更多信息,请查看this 链接。

对于使用 Rebar 启动或加载它们,您可以发布并让 Rebar 启动或加载它们。以下是用于发布的示例 Rebar 配置文件的 sn-p:

relx, [
    release, 
    your_app, "0.1.0",
        [your_dep_app_1,
         your_dep_app_2, load]].

此配置加载并启动 your_dep_app_1,但仅加载 your_dep_app_2。有关 Rebar 发布管理器的更多信息,请查看this 链接。

【讨论】:

以上是关于在 Erlang 应用程序中加载依赖项的代码路径的正确方法是啥。的主要内容,如果未能解决你的问题,请参考以下文章

在不同的 AppDomain 中加载具有依赖项的程序集

在 Qt Creator 中加载具有相对路径的文件

如何获取文件路径?在基于文档的应用程序中加载文档

如何在 webpack 中加载 CSS 的根路径

获取文件路径而不在内存中加载文件?

在同一个进程中加载​​同一个 DLL 的 2 个版本