1

作为一个 OTP 新手,我正在努力理解如何构建我的 Erlang 项目。到目前为止,它在 rebar 管理的 app 目录下有几个应用程序:

proj_root
   apps
      app1
      app2
      appN
   rebar.config 

例如,我可以在 shell 中使用 application:start(app1) 启动 app1。毫无疑问,我可以通过 appN 重复这一点。但是有没有首选或更好的方法?比如说,我可以编写一个捆绑所有这些开始的函数吗?如果是这样,我应该把它放在哪里?

我还有其他几个问题,但将单独发布。

非常感谢,

LRP

4

1 回答 1

7

您确实可以按照您的建议手动启动应用程序。如果您有许多应用程序并且它们之间存在依赖关系,这很快就会变得繁重。

使用递归函数很容易实现流程自动化。如果您在一个或多个依赖项未运行时尝试启动应用程序,application:start/1将会失败并返回{error, {not_started, App}}. 此功能可以在您的任何应用程序中,甚至可以在它自己的应用程序中。

但是,这种手动(或自动)的方式不是 OTP 方式,即使它可以证明是有用的(通常用于测试......)。如果您遵循 OTP 原则,您应该.rel使用包含所有应用程序的文件创建一个版本。OTP 版本由一组应用程序(您的应用程序和它们所依赖的系统应用程序)、一个模拟器和一个启动脚本组成,该脚本将启动所有应用程序(并处理依赖项)。可以通过使用指向正确引导脚本的-boot标志来执行使用您的应用程序启动节点。erl

这是相当复杂的,rebar 实际上可以构建版本。它甚至会生成 shell 脚本来使用 OTP 引导机制启动所有应用程序的节点。

于 2013-09-04T04:15:58.290 回答