作为OTP noobie,我正在努力了解如何构建我的Erlang项目。到目前为止,它在由rebar管理的app目录下有几个应用程序:
proj_root
apps
app1
app2
appN
rebar.config
我可以在应用程序:start(app1)的shell中启动app1。毫无疑问,我可以通过appN重复这一点。但是有更好或更好的方法吗?我可以说,编写一个捆绑所有这些开头的函数吗?如果是的话,我该把它放在哪里?
我还有其他几个问题,但会单独发布。
非常感谢,
LRP
答案 0 :(得分:6)
您确实可以按照建议手动启动应用程序。如果您有许多应用程序并且它们之间存在依赖关系,这很快就会变得很麻烦。
使用递归函数实现自动化过程非常容易。如果在一个或多个依赖项未运行时尝试启动应用程序,application:start/1
将失败并返回{error, {not_started, App}}
。此功能可以在您的任何应用程序中,甚至可以在自己的应用程序中。
然而,这种手动(或自动)方式是而不是OTP方式,即使它可以证明是有用的(通常用于测试......)。如果您遵循OTP原则,您应该使用包含所有应用程序的.rel
文件创建发布。 OTP版本由一组应用程序(它们和它们依赖的系统应用程序),一个模拟器和一个启动脚本组成,它将启动所有应用程序(并处理依赖项)。使用指向正确启动脚本的erl
-boot
标志可以启动应用程序启动节点。
这非常复杂,实际上钢筋build releases。它甚至会生成shell脚本,使用OTP引导机制启动所有应用程序的节点。