Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CouchDB作为Erlang发行版的一部分_Erlang_Couchdb_Release_Otp_Mochiweb - Fatal编程技术网

CouchDB作为Erlang发行版的一部分

CouchDB作为Erlang发行版的一部分,erlang,couchdb,release,otp,mochiweb,Erlang,Couchdb,Release,Otp,Mochiweb,我想构建一个以Django作为前端,YAWS()或Mochiweb/Webmachine作为后端,CouchDB作为数据存储的应用程序。此外,我计划广泛使用CouchDB的复制能力,以便为整个应用程序提供高容错性 我倾向于认为,为了实现这一点,我必须创建一个单独的OTP版本,它将YAWS和CouchDB作为Erlang/OTP应用程序 这种方法似乎正确吗?如何根据OTP应用程序组织YAWS和CouchDB,以创建可靠的生产设置?有没有这样做的最佳实践?我建议创建DEB/RPM/您可以将其命名为一

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

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


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

我建议创建DEB/RPM/您可以将其命名为一个或多个包。CheckInstall是最简单的解决方案。

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

处理Erlang复杂的发布过程的一种流行方法是让它为您完成。他们有办法让你走上正确的道路。我不知道你目前是否正在使用钢筋来管理你的项目,但它让事情变得容易多了。如果您还没有使用它,那么它绝对值得一看

但是,钢筋不会立即包含您的依赖项。为此,您应该修改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应用程序知道需要启动它所依赖的应用程序。如果有生成的钢筋项目,请修改
。我自己还没试过,希望对你有用

进一步阅读:

  • 我以自己的项目为例

yaws
可以在嵌入式模式下运行。但是,我建议您参考最新的
氮网络框架
()版本。它们包含整个Erlang VM、Yaws或Cowboy或Mochiweb或Web机器,整个安装程序作为单个应用程序打包、安装、启动和停止。谢谢!但如果我选择氮气,我将不得不忍受MVC模式(和/或氮气框架本身的架构模式),对吗?因此,我的应用程序的体系结构将受到氮气体系结构的强烈影响?我想他不是在告诉你切换到氮气,而是要看看他们用rel目录和rebar中的reltool配置文件打包发行版的方式。
{application, app, [
    ...
    {applications, [
              jiffy,
              cowboy,
              kernel,
              stdlib
             ]},
    ...
}.