Elixir中的:build_embedded和:start_permanent

use*_*039 2 elixir-mix elixir

我现在浏览Elixir官方网站,并了解Mix。我遵循他们的榜样。

他们在文档中提到:

编译源代码时,Elixir会将工件编译到_build目录。但是,在许多情况下,为了避免不必要的复制,Elixir会创建从_build到实际源文件的文件系统链接。为true时,:build_embedded禁用此行为,因为它旨在提供在_build中运行应用程序所需的一切。

关于此摘录,我有几个问题:

  1. 什么是文件系统链接?它只是指“ bin / elixir”之类的东西吗?
  2. 您是否可以改写“ Elixir将创建从_build到实际源文件的文件系统链接”?我不确定通过创建指向实际源文件的链接意味着什么。这是否意味着它不是在_build文件夹中构建工件,而是在其他地方?
  3. 为什么将所有工件放在_build文件夹中比其他地方更好?显然是因为最好将所有工件放在一个文件夹中吗?

    最后一个问题 :start_permanent

    • 在文档中说:start_permanent option starts your application in permanent mode, which means the Erlang VM will crash if your application’s supervision tree shuts down.。当监控树关闭时,使VM崩溃总是更好吗?这背后的动机是什么?

Mik*_*hot 5

这篇博客文章详细介绍了:build_embedded:start_permanent选项。

:build_embedded

:build_embedded启用协议合并,这使某些函数调用(例如Enum模块函数)更快。

它还会在priv目录中创建文件的完整副本,例如您可能拥有的静态资产priv/static

在开发过程中,您无需在每个版本上都完整复制这些文件,只需链接它们就可以更快。

对于生产版本,它将生成这些文件的完整副本,因此无需遵循符号链接并使_build目录自包含。

:start_permanent

:start_permanent 对于您的应用程序的生产版本而言,它是理想的,因此您依赖的所有其他OTP应用程序(牛仔,postgrex等)也将关闭,并且操作系统进程将终止。

否则,其他OTP应用程序将保持运行状态,但您的主应用程序代码将不运行,从而使系统处于半工作状态。

终止操作系统进程将使主机监视工具有机会重新启动整个系统或发出警报。