受益于Erlang中的".app"文件?

jld*_*ont 7 erlang

我从来没有真正使用过.app我的项目文件.我理解通过application模块加载应用程序需要这些.

还有其他用途吗?

Jer*_*all 11

*.app和*.rel文件用于生成启动脚本.启动erlang时,启动脚本用于自动启动我的应用程序.应用程序资源文件描述了在启动应用程序之前需要运行的应用程序.例如,如果我使用mnesia并在我的应用程序的.app文件中指明,当我生成启动脚本并使用它来启动我的应用程序时,它将在启动我自己的应用程序时为我启动mnesia.

虽然您可以与其他软件包管理器进行自动依赖项安装/处理,但引导脚本对于管理应用程序启动时的依赖关系非常有用,这在OTP应用程序设置中非常重要.

注意:otp中的应用程序是指一组正在运行的进程和/或代码.应用程序可以通过多种方式依赖于其他应用程序.要么要么安装代码,要么要求应用程序运行.


Chr*_*ian 8

它们用于构建版本时(使用*.rel生成启动脚本).我建议只从*.app文件和应用程序行为回调开始.至于从OTP开始.这是一个很好的开发中心:

-module(foo).
-export([start/0]).
start() ->
    [application:start(A) || A <- [sasl, inets, x, y, etc]].
Run Code Online (Sandbox Code Playgroud)

通过简单的方式启动您依赖于运行应用程序的所有应用程序

$ erl -s foo
Run Code Online (Sandbox Code Playgroud)
  • 如果您的项目要用作其他项目的服务或框架,那么另一个好处是Erlang应用程序可以依赖或包含您的应用程序.Erlang应用程序是提供服务甚至库的单元(stdlib是一个库,没有"移动部件",只有库模块).
  • 作为Erlang应用程序,您可以通过简单的方法将配置参数传递给应用程序.当你传递-mnesia dir '"/some/path"'给erl时,它被mnesia应用程序访问为application:get_env(mnesia, dir).如果定义了一个名为的应用程序foo,则可以传递-foo key 'some-Erlang-literal'给erl.*.app文件可以包含该env部分中的默认值,*.rel文件会覆盖它们,命令行会覆盖它们.
  • *.app文件包含列出应用程序引入的模块和注册过程的部分.在构建版本时使用此选项来检查应用程序之间是否存在冲突.

我不太了解Erlang应用程序的一些其他功能:

  • 开始阶段.用于具有复杂启动需求的应用程序,例如暂时"部分运行".
  • 分布式应用.用于定义应用程序应在群集中运行的位置.
  • 接管.用于从分布式应用程序中释放计算机,例如,如果需要维护或升级.

最终,您将开始希望以更结构化的方式启动应用程序集,这就是整个发布/启动脚本变得更容易理解的时候.或者相反,你会认为这对你的具体需求来说太过分了.刚开始使用一个简单的*.app和一个带有应用程序行为回调的模块.你不会回头看.