7

フロントエンドとしてDjango、バックエンドとしてYAWS( appmods)またはMochiweb / Webmachine、データストアとしてCouchDBを持つアプリケーションをビルドしてデプロイしたいと思います。さらに、アプリケーション全体に高いフォールトトレランスを提供するために、CouchDBの複製機能を広範囲に使用する予定です。

これを実現するには、Erlang/OTPアプリケーションとしてYAWSとCouchDBを含む単一のOTPリリースを作成する必要があると思う傾向があります。

このアプローチは正しいと思われますか?堅実な本番セットアップを作成するために、OTPアプリケーションの観点からYAWSとCouchDBをどのように編成できますか?それを行うためのベストプラクティスはありますか?

4

2 に答える 2

4

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。私はそれを自分で試したことがありません、うまくいけばそれはあなたのために働くでしょう。

参考文献:

于 2012-11-14T01:58:11.160 に答える
-2

DEB / RPM/you-name-itパッケージを作成することをお勧めします。CheckInstallは、このための最も簡単なソリューションです。

于 2012-11-12T14:04:44.157 に答える