【问题标题】:What are best practices for making Erlang releases?制作 Erlang 版本的最佳实践是什么?
【发布时间】:2011-07-23 15:11:48
【问题描述】:
我一直在查看 Faxien+Sinan 和 Rebar,Erlang OTP 的基本理念似乎是,在单个 Erlang 映像实例上安装应用程序和发布。保持发布自包含的最佳实践是什么?有没有办法打包发布,这样您就不必为要部署的机器修改站点?将所有依赖项收集到代码库中进行管理怎么样?
也许我违背了规律……我来自 Java 背景,“除了 JVM 没有预装”的理念似乎非常不同。
【问题讨论】:
标签:
build
erlang
dependencies
release
【解决方案1】:
恕我直言,这无法用几句话来回答。您应该阅读所包含文档的某些部分,尤其是“Erlang/OTP System Documentation”(otp-system-documentation-XYZpdf,其中 XYZ 是版本号),或者查看“Erlang and OTP in Action”一书,因为自始至终这本书有一个“服务”示例,其中包含从第一步开始的不同“部分”,使用 Erlang/OTP 概念并最终构建“发布”。
恕我直言,这是目前最好的书,因为它不仅介绍了 Erlang,还展示了 OTP 是什么以及如何将 OTP 用于项目。而且它不仅仅是松散样本的集合,而是围绕单个项目构建的。
【解决方案2】:
我将描述目前适用于我的方法,用于定期(通常是每天)向 EC2 上的少数实例发布:
- 我使用 rebar 设置我的项目并将其签入 github。
- 我的所有依赖项都列在我的 rebar.config 文件中(它们也在 github 上)。
- 我的 Makefile 看起来与我描述的 here 相似。
- 我的 EC2 映像只有常规构建的 erlang,默认情况下没有安装其他库。
- 要创建一个新节点,我启动一个实例,克隆我的 git 存储库,然后运行
make。这将获取我的依赖项并构建所有内容。
- 要更新我的代码,我执行
git pull 和rebar update-deps。根据更改的内容,我可能会重新启动节点,或者经常附加到正在运行的节点并重新加载更新的模块。将启动和附加脚本作为项目的一部分会有所帮助。
看看像webmachine 这样的项目是如何打包的可能会有所帮助。
我对标准的 OTP 发布管理系统了解不多,只是看起来工作量很大。因为这似乎与快速部署背道而驰,所以我从未认真尝试过——尽管我确信它对其他项目有意义。