首页 文章

CouchDB作为Erlang版本的一部分

提问于
浏览
7

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

我倾向于认为,为了实现这一点,我必须创建一个单独的OTP版本,它将YAWS和CouchDB作为Erlang / OTP应用程序 .

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

2 回答

  • 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发布处理文章中所述 .

    但是,在这一点上,符合OTP标准,并且您不能以这种方式包含它 . 您可以使用另一个发行版,而不是:rcouch . 我自己没试过,希望它对你有用 .

    进一步阅读:

  • -2

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

相关问题