Erlangリリースは、依存するライブラリがすべて含まれているため、ソフトウェアをパッケージ化するのに適した方法です。このようにして、異なるerlangアプリケーションは、互いに競合することなく、必要なライブラリの異なるバージョンを実行できます。
Erlangが持っている複雑なリリースプロセスに対処する一般的な方法は、Rebarにそれを任せることです。彼らはあなたを正しい道に導くためのクイックスタートガイドを持っています。現在Rebarを使用してプロジェクトを管理しているかどうかはわかりませんが、作業がはるかに簡単になります。まだ使用していない場合は、検討する価値があります。
ただし、rebarには、すぐに使用できる依存関係は含まれません。これを行うには、reltool.configファイルと必要なすべてのアプリケーションを変更する必要があります。
最初のステップは、すべての依存関係が配置されているディレクトリを追加することです。例:
{sys, [
...
{lib_dirs, ["../deps"]},
...
}.
次に、依存関係をアプリケーションとして追加して、リリースに含めます。
{sys, [
...
{app, jiffy, [{incl_cond, include}]},
{app, cowboy, [{incl_cond, include}]},
...
}.
これで、コマンドを実行するrebar generate
と、アプリケーションはlibの下のターゲットディレクトリにあるはずです。
find brawl_server -type d -maxdepth 2
brawl_server
brawl_server/bin
brawl_server/erts-5.9.1
brawl_server/erts-5.9.1/bin
brawl_server/lib
brawl_server/lib/brawl_server-1.1
brawl_server/lib/cowboy-0.6.0
brawl_server/lib/jiffy-0.6.1
brawl_server/lib/kernel-2.15.1
brawl_server/lib/sasl-2.2.1
brawl_server/lib/stdlib-1.18.1
brawl_server/log
brawl_server/log/sasl
brawl_server/releases
brawl_server/releases/1
また、独自のOTPアプリケーションが、依存するアプリケーションを起動する必要があることを認識していることを確認する必要があります。生成されたRebarプロジェクトがある場合は、<appname>.app.src
ファイルを変更してそれらを含めます。
{application, app, [
...
{applications, [
jiffy,
cowboy,
kernel,
stdlib
]},
...
}.
Rebarリリース処理の記事に記載されているように、リリースをコンパイルして生成し、含まれているスクリプトを使用して実行できるはずです。
ただし、この時点では、明らかにバニラCouchDBがOTPに準拠しておらず、この方法で含めることができないため、追加のしわがあります。代わりに、使用できる可能性のある別のディストリビューションがあります:rcouch。私はそれを自分で試したことがありません、うまくいけばそれはあなたのために働くでしょう。
参考文献: