什么时候使用 erlang application:start 或 includes_applications 和一个主管?

Viv*_*lar 6 erlang erlang-otp rebar

我有一个 Erlang 应用程序,它的 deps 目录依赖于另一个应用程序。

据我所知,我也可以;

a) 通过调用 application:start(some_other_app) 从我的包含应用程序启动我的依赖应用程序,该应用程序启动应用程序并显示它在 Observer 中独立运行。

b) 使用 {included_applications, [some_other_app]} 在我的 .app 文件中包含我的依赖应用程序,以便加载应用程序但不启动,然后从我自己的顶级主管启动包含的应用程序。这将再次启动包含的应用程序,并显示其在 Observer 中我自己的监督层次结构下运行。

我的问题是我什么时候应该使用这两种方法?如果我使用选项“a”并且我的依赖应用程序退出,它会重新启动还是应该使用方法“b”以便相应地监视我拥有的任何依赖项?

附带说明一下,我使用 Rebar 来打包和管理我的依赖项。

谢谢,

安迪。

mar*_*log 1

在应用程序描述符中声明依赖项是正确的方法,因此在大多数情况下您应该使用选项 B。

应用程序控制器将确保在启动应用程序之前所有依赖项都存在并启动(按顺序),并且如果这些依赖项因错误而终止,也会使您的应用程序失败。此外,应用程序控制器将在需要时关闭所有内容。

除此之外,如果您选择选项 A,则当使用 application:start/1 启动应用程序时,默认情况下您将获得一个临时应用程序,因此您应该使用 application:start/2,并将永久原子作为第二个参数传递。

编辑:在应用程序描述符中包含依赖项也有助于可见性,无需扫描源代码即可轻松了解您的依赖项。