我的 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 项目有多个应用程序:我应该如何启动它们?的主要内容,如果未能解决你的问题,请参考以下文章

Erlang,如何加载应用程序及其依赖项

Erlang、Rebar 和具有多个应用程序的程序组织

如何分发 Erlang 进程(主管行为)?

通过 REST 访问 Erlang 业务层

学习 Erlang 的最佳方法是啥?

如何从 github 安装 erlang 模块?