Erlang start在生产中的应用

Erlang start在生产中的应用,erlang,rebar,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 tr

在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 
./rebar compile generate
这将提示打开Erlang shell,然后我将在那里键入如下内容:

应用程序:启动(myapp)


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

好吧,您可以尝试将其连接到Apache,或者使用一个简单的解决方案,它没有屏幕会话那么简单。如果您实际上是在生产服务器上实现这一点,并且不想使用Apache路由,那么您可以考虑一个.< /P>< P>添加参数<代码> -OpDeult。报告很好地总结了这一点:

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

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


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

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

-boot start_sasl
,查找“用户定义的启动脚本”部分

更简单的选择可能是将应用程序转换为使用钢筋:。然后,您将能够执行以下操作:

#!/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 
./rebar compile generate
这将为应用程序创建一个版本,允许您执行以下操作:

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

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

Apache与这里的任何东西有什么关系?我的Erlang节点不运行web服务器。啊,根据您提供给脚本的信息,我假设它的行为是web服务器,但我猜它也可能只是与另一个web服务器交互。在这种情况下,apache就没有那么有用了;)
nohup
仍然是一个很好的解决方案,尽管使用
-detached
选项可能更好。令人困惑的回答。Apache与此无关,分离的erlang节点不需要nohup。注意,他已经提到正在使用rebar。如果您解释了如何编写一个rebar reltool.config,您的答案会更好。