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

标签 deployment erlang

正确使用发布和 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.

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

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

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

最佳答案

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

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

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

不使用发布的一个缺点是与其他 erlang 应用程序的互操作性。例如,CouchDB 最初并不是为了兼容 OTP 而编写的。因此,许多想要将其嵌入到他们的 erlang 应用程序中的人如果不考虑其他发行版就无法做到这一点。

关于deployment - 如何在没有发布的情况下部署和更新 erlang 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18242850/

相关文章:

c# - 如何部署 ASP.NET 项目以使 .aspx 文件中没有代码?

c# - 部署无需安装即可运行的 Visual Studio 应用程序的最佳方式

tcp - Erlang TCP 服务器处理

terminal - RabbitMQ 服务器错误

erlang - 如何用 erlang 中的 bool 原子序列创建八进制表示

python - 如何持续交付部署在 Azure 中的 python 函数应用程序?

java - 通过 FTP 进行 Azure Java 部署而不解压

java - 如何增量更新Java EE Web应用程序?

erlang - 如何跨两个 Erlang 节点发送消息

programming-languages - Erlang 中非短路 bool 运算符的用途是什么?