烘焙软件:将任何Elixir应用程序编译为单个二进制文件

2021-06-09 03:27:20

由于社区的回应,我们在完成迭代的迭代的回应时,在2020年周末进行烤盘。虽然它没有准备生产,但它绝对就绪毒品 - 只是预计API将在近期改变。如果你' d liketo帮助,请告诉我们并保持调整!

烤盘将MixReleaes延伸到能够将Elixir项目转换为可以复制和直接的单一二进制文件。无需安装Erlang或Untar文件。二进制文件看起来并感受到其他语言的构建产品。

支持OSX和Linux(我们记住了与Windows和BSD的代码,因此对这些平台的支持可能不会遥远)

此自述文件包含使应用程序与Bakewareand参考资料一起使用的基础知识,因为您需要挖掘它的工作原理。

由于一切都是很快的,但整合是公平的,我们建议您来看看这些例子。裸BELESELIXIR脚本,OTP应用程序,PHOENIX应用程序和MUNTS的MIXIC.EXS文件和运行指令的小型更改可以为自己尝试。

烘焙软件支持在可执行的二进制组件中填写到混合释放中,通过使用烘烤软件释放释放释放.Asemble / 1功能。

这将组装创建烘焙软件ExecutableThat的必要组件,可以跨机器分发以运行脚本/应用程序有条件的环境设置(例如安装Elixir / Erlang等)

:Compression_Level - Zstandard压缩级别(1到19),高层将导致更好的压缩,但构建较慢

:start_command - 调用时要运行的start脚本命令。这个defaultsto"开始",但可以更改为" start_iex"例如,如果你想要aprompt。请参阅mix.ReleaseFor支持的命令。

def释放do [demo:[bakeware:[compression_level:1,start_command:"守护进程和#34; ] ] ] 结尾

烘焙软件支持类似于Erlang' SEScript的API,用于实现主功能。这里'' s一个示例模块:

defmodule myapp。主要确实使用烤盘。脚本@impl烤盘。脚本def main(_args)do io。 Puts"你好,世界! " 0结束结束

返回值设置脚本退出状态(for成功和其他值为错误)。支持其他值类型。请参阅:Erlang.Halt / 2用于如何启动。

为什么模块会加入:mod?带烤盘的一切都操作了Onotp发布。 BakeWare.Script中的宏添加脚手架以从发布中调用您的主/ 1函数。

烤盘二进制文件似乎具有大约12 MB的下限。我们希望他们可以拨打较小的盒子,但这里有一些坎普:

使用mix_env = prod构建。默认为mix_env = dev,因此请确保设置环境变量。

运行RM -FR _Build,然后混合发布。在发布目录中的开发Cruft构建过程中。烤盘可以' t讲述了重要文件和cruft之间的区别,如果youdon' t做清洁的构建,可执行文件会慢慢增长。

检查您的_build / prod / rel lt; name>目录,特别是在最终可能包括在内的Libfor文件或依赖项下。

确保编译时依赖项被标记为运行时:假inyour mix.ex,使它们'重新包含

BakeWare使用混合版本AndInherits默认的Erlang分布开始。如果您'重新使用命令行或其他短期应用程序的烘焙软件,这是不必要的启动erlang分发服务器运行并阻止两个ApplicationInstances一次运行。

要禁用,请运行mix refory.init以在Rel目录中创建Starter Env.e.ex和env.bat.eex文件。然后编辑文件以设置refile_distribution = none。

烤盘二进制文件包括Erlang运行时,但主机系统上仍有依赖关系。其中包括由Erlang运行时引用的C运行时和其他库以及应用程序中的任何NIFS和端口。幸运的是,许多图书馆的中华的Abis非常稳定,但如果分发到广泛植物,它很有用来构建一个带有旧库版本的系统。 Pythonhas在他们的包装中是一个有用的指针。

有时,当openssl未静态编译时,vierd ssl状态错误会出现在openssl in.you&#39中;如果您在发送类似SSL连接的情况下,请在发送第一个数据包等SSL连接中,请将远程结束丢弃的SSL连接,则会出现openssl。附件是一个可以与船长留下的码头文件,用来建造你的烘焙释放。

#edit在dockerfileenv ssl_version = 1.1.1jenv otp_version = ootp-23.1.4env elixir_version = v1.11.3 #buck erlang与静态opensslpodman build --tag mybuilder dockerfilefolder / #bake您的roadedpodman运行 - it -rm -v 。:/ root / myproject --entrypoint bash mybuilder -c" cd / root / myproject&& ./build.sh" ;;#build.shexport mix_env = prodrm -rf _buildmix deps.getmix reaseasecp _build / prod / rel / bakeware / myproject。

在Windows 8和10上测试烘焙软件以在Mingw环境中工作。要设置环境,请按照下列步骤操作:

使用巧克力素安装Elixir,Zstandard,Make和Mingw:Choco Install-ielixir zstandard制作mingw

我们需要更改Elixir_Make for Windows使用的默认nake以使我们刚刚安装的:导出make = make

通常,传递给烘焙软件应用程序的命令行参数将传递给Elixir。可以传递一些特殊的命令行参数以调整启动器行为。烤盘在遇到a - 时停止解析命令行参数。已处理的命令行参数未传递给Elixir。

烤盘维护提取的二进制文件的缓存。 需要运行Theotp发行版,并且它启用启动时间优化。 所有代码都在Apache-2.0下获得许可,但ZSTD除了双重许可的BSD / GPL。 有关更多详细信息,请参阅它' s许可证和复制文件。