Erlang start在生产中的应用
在localhost上测试erlang应用程序时,我有一个启动服务器的脚本,如下所示: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
#!/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,您的答案会更好。