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