目录结构

发布处理器从发布包总安装的代码的目录结构:

  1. $ROOT/lib/App1-AVsn1/ebin
  2. /priv
  3. /App2-AVsn2/ebin
  4. /priv
  5. ...
  6. /AppN-AVsnN/ebin
  7. /priv
  8. /erts-EVsn/bin
  9. /releases/Vsn
  10. /bin
  • lib
  • 应用程序目录。
  • erts-EVsn/bin
  • Erlang运行时系统的可执行文件。
  • releases/Vsn
  • .rel 文件以及启动脚本 start.boot 。还有 relup 、 sys.config ,如果存在于发布包中。
  • bin
  • 顶层Erlang运行时系统可执行文件。应用不一定非得放在 $ROOT/lib 目录中。这样一来,一些安装目录可以存在并包含一个系统的不同部分。例如,前面的例子可以按如下方式扩展:
  1. $SECOND_ROOT/.../SApp1-SAVsn1/ebin
  2. /priv
  3. /SApp2-SAVsn2/ebin
  4. /priv
  5. ...
  6. /SAppN-SAVsnN/ebin
  7. /priv
  8.  
  9. $THIRD_ROOT/TApp1-TAVsn1/ebin
  10. /priv
  11. /TApp2-TAVsn2/ebin
  12. /priv
  13. ...
  14. /TAppN-TAVsnN/ebin
  15. /priv

其中 $SECOND_ROOT$THIRD_ROOT 是作为调用 systools:make_script/2 函数中的变量引入的。

无盘与只读客户端

如果一个完整的系统包含一些无盘和只读客户端节点,那么必须在 $ROOT 目录中添加一个 clients 目录。一个只读节点的意思是一个节点的文件系统是只读的。

clients 目录还应该对每个支持的客户端节点有一个对应的子目录。每个客户端目录的名字必须是对应的客户端节点的名字。每个客户端目录还应包含 binreleases 子目录。这些目录用于存放有关安装的发布的信息,并且给客户端指派当前的发布。终上所述, $ROOT 目录应包含以下内容:

  1. $ROOT/...
  2. /clients/ClientName1/bin
  3. /releases/Vsn
  4. /ClientName2/bin
  5. /releases/Vsn
  6. ...
  7. /ClientNameN/bin
  8. /releases/Vsn

如果所有的客户端都运行在同一种类型的Erlang机器上,那么应该使用这种结构。如果有些客户端运行不同类型的Erlang机器,即运行在不同的操作系统上,那么 clients 目录可以被划分为每种Erlang机器一个子目录。或者,你也可以为每种类型的机器设置一个 $ROOT 。对于每种类型,还应包含为 $ROOT 指定的某些目录:

  1. $ROOT/...
  2. /clients/Type1/lib
  3. /erts-EVsn
  4. /bin
  5. /ClientName1/bin
  6. /releases/Vsn
  7. /ClientName2/bin
  8. /releases/Vsn
  9. ...
  10. /ClientNameN/bin
  11. /releases/Vsn
  12. ...
  13. /TypeN/lib
  14. /erts-EVsn
  15. /bin
  16. ...

对于这个结构, Type1 型的客户端的根目录是 $ROOT/clients/Type1