6

当我在 localhost 上测试我的 erlang 应用程序时,我有一个启动服务器的脚本,如下所示:

#!/bin/sh
PWD="$(pwd)"
NAME="$(basename $PWD)"
erl -pa "$PWD/ebin" deps/*/ebin -boot start_sasl \
    -name devnode@127.0.0.1 \
    -s reloader \
    -s $NAME \
    -setcookie some_random_cookie \
    +K true \
    +P 65536 

这会提示打开 Erlang shell,然后我会输入如下内容:

application:start(myapp)

这对于开发目的来说很好,但是我如何在生产中部署它呢?截至目前,我能想到的唯一方法是启动屏幕进程并从中分离。我不认为应该是这样。我正在使用钢筋,如果这有帮助的话。

4

3 回答 3

7

听起来您想使用自定义启动脚本。引导脚本告诉 erlang 系统要启动什么。在您使用的脚本中,您将启动脚本设置为:

-boot start_sasl

http://www.erlang.org/doc/system_principles/system_principles.html,查找“用户定义的引导脚本”部分

一个更简单的选择可能是将您的应用程序转换为使用 rebar: https ://github.com/basho/rebar 。然后,您将能够执行以下操作:

./rebar compile generate

这将为应用程序创建一个版本,然后允许您:

./rel/<app_name>/bin/<app_name>

相同的原理,只是为了方便使用而包装起来。

于 2011-08-11T22:29:07.120 回答
5

添加参数-detached。该文档很好地总结了这一点:

启动与系统控制台分离的 Erlang 运行时系统。对于运行守护进程和后台进程很有用。

一旦你这样做了,你就可以让你的应用程序从-s参数开始。假设$NAME= myapp,init 将尝试调用myapp:start/0(如果需要,您可以自定义它)。该函数应以调用application:start(myapp).

如果你能把所有这些拼图都准备好,你应该有一个工作脚本。

于 2011-08-11T21:07:35.153 回答
-8

好吧,您可以尝试将其连接到 Apache (请参阅此处),或者使用一个不像屏幕会话那样 hacky 的简单解决方案nohup。如果您实际上是在生产服务器上实现此功能,并且不想采用 Apache 路线,则可以考虑使用init script

于 2011-08-11T20:56:15.213 回答