Erlang开始在生产中应用

时间:2011-08-11 20:51:36

标签: erlang rebar

当我在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)

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

3 个答案:

答案 0 :(得分:6)

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

-boot start_sasl

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

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

./rebar compile generate

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

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

相同的原则,只是为了方便使用而包装好。

答案 1 :(得分:5)

添加参数-detacheddocumentation很好地总结了这一点:

  

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

完成此操作后,您可以使用-s参数启动应用程序。假设$NAME = myapp,init将尝试调用myapp:start/0(如果需要,您可以自定义此项)。该函数应以调用application:start(myapp)结束。

如果你可以获得所有这些拼图,你应该有一个工作脚本。

答案 2 :(得分:-8)

好吧,你可以尝试将它挂钩到Apache (see here),或者一个简单的解决方案,不像屏幕会话那样使用nohup。如果您实际在生产服务器上实现此操作,并且不想采用Apache路由,则可以考虑使用init script