CouchDB作为Erlang版本的一部分

时间:2012-11-12 11:17:29

标签: erlang couchdb release otp mochiweb

我想构建和deploy一个以Django为前端的应用程序,YAWS(appmods)或Mochiweb / Webmachine作为后端,CouchDB作为数据存储。此外,我计划广泛使用CouchDB的复制能力,以便为整个应用程序提供高容错性。

我倾向于认为为了实现这一点,我必须创建一个OTP版本,其中YAWS和CouchDB作为Erlang / OTP应用程序。

这种方法似乎是正确的吗?如何在OTP应用程序方面组织YAWS和CouchDB以创建可靠的生产设置?这样做有什么最佳实践吗?

2 个答案:

答案 0 :(得分:4)

Erlang版本是打包软件的好方法,因为它们包含所有依赖库。这样,不同的erlang应用程序可以运行所需库的不同版本,而不会相互冲突。

处理复杂的发布过程的一种流行方式是让Erlang让Rebar为你做。他们有quick start guide让你走上正确的道路。我不知道您目前是否正在使用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。我自己没试过,希望它对你有用。

进一步阅读:

答案 1 :(得分:-2)

我建议创建DEB / RPM / you-name-it包或包。 CheckInstall是最简单的解决方案。