我的Erlang项目有多个应用程序:我应该如何启动它们?

时间:2013-09-04 00:36:17

标签: erlang otp erlang-shell

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

proj_root
   apps
      app1
      app2
      appN
   rebar.config 

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

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

非常感谢,

LRP

1 个答案:

答案 0 :(得分:6)

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

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

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

这非常复杂,实际上钢筋build releases。它甚至会生成shell脚本,使用OTP引导机制启动所有应用程序的节点。