deployment - 如何在没有发布的情况下部署和更新 erlang 应用程序

正确使用 release 和 relups 来部署和更新 erlang 应用程序很困难,有时不值得。

来自 http://learnyousomeerlang.com/relups :

If it is possible to upgrade your application in ways that do not require relups, I would recommend doing so. It is said that divisions of Ericsson that do use relups spend as much time testing them as they do testing their applications themselves. They are a tool to be used when working with products that can imperatively never be shut down.



我想尝试另一种方式。我知道有些人开发复杂的应用程序并且不使用发行版。如果您是其中之一,请描述您的工作流程。

您是否只是在主机上克隆存储库并运行运行 makerebar get-deps compile 然后启动应用程序?或者您可能只复制光束文件?你如何重新加载更新的模块?你使用 mochiweb 的重载器吗?等等。

换句话说,你如何在没有发布的情况下部署和更新 erlang 应用程序?这种方式的优缺点是什么?

最佳答案

Relups 很复杂,但对于使用发行版不是必需的。 relup 是一个版本的升级。如果您能承受一些停机时间,而不是使用 relups,您可以简单地删除正在运行的 erlang 版本,升级它,然后重新启动它。 relup 允许您在不停止系统的情况下进行升级。正如您提供的报价中提到的,只有在任何停机时间都无法接受时才需要这样做。

我个人绝不会在不使用发行版的情况下在生产环境中运行任何 erlang 代码。发布允许您将所有依赖项捆绑在一起。该版本是一个自包含的应用程序。如果没有发布,我将迷失在自定义目录结构、构建过程、依赖项管理和启动脚本的无尽迷宫中。

关于处理发布的难度有很多大惊小怪,但根据我的经验,情况并非如此。确实,让现有的工作项目适合发布可能会很棘手,但如果您使用正确的工具从头开始使用它们,这比滚动您自己的项目更简单。 Rebar 使大多数繁琐的任务变得简单。

不使用发行版的一个缺点是与其他 erlang 应用程序的互操作。例如,CouchDB 最初并未编写为符合 OTP。结果,许多想要将其嵌入到他们的 erlang 应用程序中的人无法在不查看替代发行版的情况下做到这一点。