2011-08-11 127 views
5

启动应用程序当我在本地主机上测试我的二郎应用程序,我有开始看起来像服务器的脚本如下:二郎生产

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

这提示打开二郎壳,并从那里我键入类似:

application:start(myapp)

这是精为发展宗旨,但我怎么在生产中部署此?就目前而言,我能想到做到这一点的唯一方法是启动一个屏幕过程并将其从中分离出来。我认为情况并非如此。如果这有帮助,我使用螺纹钢。

回答

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> 

相同的原则,就都包起来,方便使用。

+2

请注意,他已经提到正在使用钢筋。如果你解释如何编写rebelol.config文件,你的答案会好很多。 –

-7

那么,你可以试试把它连接到Apache (see here),或者一个简单的解决方案,就像屏幕会话使用nohup那样不太好。如果你真的在生产服务器上实现这个功能,并且不想采用Apache路由,那么可以考虑使用init script

+0

Apache与这里的任何东西有什么关系?我的Erlang节点不运行Web服务器。 – randombits

+0

啊,根据你提供给脚本的信息,我认为它的行为是一个网络服务器,但我想它也可能只是与另一个网络服务器交互。在这种情况下,apache不太有用;)'nohup'仍然是一个很好的解决方案,但使用'-detached'选项可能会更好。 – stefan

+0

-1。一个令人困惑的答案。 Apache与它无关,nohup对于分离的erlang节点不是必需的。 –

5

添加参数-detacheddocumentation总结得很好:

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

一旦你这样做,你可以让你的应用程序以-s参数开始。假设$NAME = myapp,init会尝试呼叫myapp:start/0(如果需要,可以自定义)。该功能应以致电application:start(myapp)结束。

如果你能得到所有这些拼图块,你应该有一个工作脚本。