我的 Erlang 项目有多个应用程序:我应该如何启动它们?
Posted
技术标签:
【中文标题】我的 Erlang 项目有多个应用程序:我应该如何启动它们?【英文标题】:My Erlang project has multiple applications: How should I start them? 【发布时间】:2013-09-07 08:35:00 【问题描述】:作为一名 OTP 新手,我正在努力理解如何构建我的 Erlang 项目。到目前为止,它在一个由 rebar 管理的 app 目录下有几个应用程序:
proj_root
apps
app1
app2
appN
rebar.config
我可以使用 application:start(app1) 在 shell 中启动 app1。毫无疑问,我可以通过 appN 重复此操作。但是有没有首选或更好的方法?比如说,我可以编写一个捆绑所有这些开始的函数吗?如果是这样,我应该把它放在哪里?
我还有其他几个问题,但将单独发布。
非常感谢,
LRP
【问题讨论】:
【参考方案1】:您确实可以按照您的建议手动启动应用程序。如果您有许多应用程序并且它们之间存在依赖关系,这很快就会变得繁重。
自动化过程很容易使用递归函数来实现。如果您尝试在一个或多个依赖项未运行时启动应用程序,application:start/1
将失败并返回 error, not_started, App
。此函数可以在您的任何应用程序中,甚至可以在它自己的应用程序中。
但是,这种手动(或自动)的方式不是 OTP 方式,即使它可以证明是有用的(通常用于测试......)。如果您遵循 OTP 原则,您应该使用包含所有应用程序的 .rel
文件创建一个版本。 OTP 版本由一组应用程序(您的应用程序和它们所依赖的系统应用程序)、一个模拟器和一个将启动所有应用程序(并处理依赖项)的引导脚本 组成。可以通过使用 -boot
标志到 erl
指向正确的引导脚本来执行使用您的应用程序启动节点。
这很复杂,钢筋实际上可以build releases。它甚至会生成 shell 脚本来使用 OTP 引导机制启动所有应用程序的节点。
【讨论】:
谢谢,保罗。这正是我一直在寻找的那种指导。我已经考虑过创建一个版本,但文档的密度让我望而却步。但是你给了我动力去挖掘和学习我必须学习的东西。 我发现 rebar 在构建版本时非常有用。具体来说:rebar create-node rebar generate
当然,您应该阅读文档并最终了解自动化背后的流程,但钢筋往往会让您在遵守 OTP 标准的同时更快地进行操作。以上是关于我的 Erlang 项目有多个应用程序:我应该如何启动它们?的主要内容,如果未能解决你的问题,请参考以下文章