6

ローカルホストで自分の 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 シェルが開かれ、そこから次のように入力します。

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 (ここを参照)にフックしてみるか、スクリーンセッションほどハックではない単純なソリューションを使用することもできますnohup。これを実際に本番サーバーに実装していて、Apacheルートを使用したくない場合は、initスクリプトを検討することをお勧めします。

于 2011-08-11T20:56:15.213 に答える