作为Erlang版本的一部分,CouchDB是什么?

7
我想要构建并部署一个应用程序,该应用程序具有Django作为前端,YAWS(appmods)或Mochiweb / Webmachine作为后端,以及CouchDB作为数据存储。此外,我计划广泛使用CouchDB的复制功能,以提供整个应用程序的高容错性。
我倾向于认为,为了实现这一点,我必须创建一个单一的OTP版本,其中YAWS和CouchDB是Erlang / OTP应用程序。
这种方法是否正确?如何在OTP应用程序方面组织YAWS和CouchDB,以创建坚实的生产设置?是否有任何最佳实践可供参考?

yaws可以在嵌入式模式下运行。然而,我建议你使用最新的Nitrogen Web Framework(http://nitrogenproject.com/downloads)版本。它们包含了完整的Erlang VM,还有Yaws、Cowboy、Mochiweb或Web machine等软件,并且安装、启动和停止都封装成一个单一应用程序。 - Muzaaya Joshua
谢谢!但是如果我选择Nitrogen,我会不得不忍受MVC模式(和/或Nitrogen框架本身的架构模式),对吧?因此,我的应用程序的架构将受到Nitrogen架构的强烈影响? - skanatek
3
我认为他并不是让你切换到氮气,而是让你查看他们如何使用reltool配置文件和rebar打包发布在rel目录下的方式。可以参考以下链接:https://github.com/nitrogen/nitrogen/blob/master/rel/reltool_yaws.config - kjw0188
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,您可以尝试使用它代替。我自己没有尝试过,希望它能为您工作。
进一步阅读:
- 学习Erlang:发布 - 我使用了我的项目brawl-online作为示例。

-2
我建议创建DEB/RPM/你想要的软件包或多个软件包。CheckInstall是最简单的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接