`
yuhaitao6688
  • 浏览: 15614 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

构建自动化mochiweb-nitrogen

阅读更多

1 在生产环境下,用inets实现的nitrgoen框架遇到并发量大的情况下会出现瓶颈,mochiweb在并发处理上优势要远大于inets,因此决定实现mochiweb-nitrogen框架。

2 准备工作,下载各应用

下载nitrogen源码http://github.com/nitrogen/nitrogen/tarball/v2.0.4

下载mochiweb源码https://github.com/mochi/mochiweb/tarball/master

下载rebar源码 https://github.com/basho/rebar/tarball/master

解压缩:

重命名:

 

 

构建rebar

 

 


以上命令生产了一个rebar文件

 

 

3 编译mochiweb_nitrogen

1 拷贝mochiweb到apps目录下
2修改makefile文件,使nitrogen能够顺利编译通过
在nitrogen/Makefile 中,rel_inner:位置下添加
@(cd apps/mochiweb; make)
3 make rel_mochiweb
4 在rel/目录下生成了一个名为nitrogen的文件夹
5 执行 证明nitrogen已经编译通过并启动成功。

4 以上编译已经通过,可以进行正常开发,但以前经常使用rebar构建项目,感觉这样开发很别扭,所以想把结构重新调整一下,如下:

5 新建自己的应用程序


把刚才生成的rebar文件考到此目录下
把mochiweb,nitrgen/apps目录下的nitrogen, simple_bridge,nprocreg考到deps目录下

 

在myapp目录下新建文件Makefile,rebar.config,start.sh

Makefile文件中内容:

 


PP_VERSION}
@echo Generated a self-contained myapp project
@echo "Usage: rel/myapp-${MYAPP_VERSION}/bin/myapp {start|stop|restart|reboot|ping|console|attach}"

package:
mkdir -p ./builds
tar -C rel -c myapp-${MYAPP_VERSION} | gzip > ./builds/myapp-${MYAPP_VERSION}.tar.gz

# SHARED
rel_inner:
@(cd rel; ./rebar generate)
@(cd rel/myapp; make)
@printf "myapp Version:\n${MYAPP_VERSION}\n\n" > rel/myapp/BuildInfo.txt
@echo "Built On (uname -v):" >> rel/myapp/BuildInfo.txt
@uname -v >> rel/myapp/BuildInfo.txt
@rm -rf rel/reltool.config




拷贝nitrogen/rel/nitrogen/site目录下的文件到site目录中

 

cp /home/andy/baidu/personal/mochiweb_test/nitrogen/rel/nitrogen/site/ebin ./ -r
cp /home/andy/baidu/personal/mochiweb_test/nitrogen/rel/nitrogen/site/include ./ -r
cp /home/andy/baidu/personal/mochiweb_test/nitrogen/rel/nitrogen/site/src ./ -r
cp /home/andy/baidu/personal/mochiweb_test/nitrogen/rel/nitrogen/site/static ./ -r
cp /home/andy/baidu/personal/mochiweb_test/nitrogen/rel/nitrogen/site/templates ./ -r
cp /home/andy/baidu/personal/mochiweb_test/nitrogen/rel/nitrogen/site/Emakefile ./

复制myapp/src 下的三个文件myapp.app.src,myapp_app.erl,myapp_sup.erl 到目录myapp/site/src下, 修改myapp_sup.erl如下:

 


删除nitrogen_init.erl,nitrogen_mochiweb.erl

 

修改 myapp/etc下配置文件

 


{server_name, nitrogen}, {document_root, "./site/static"}]}].andy@yuhaitao:~/baidu/personal/mochiweb_test/myapp/etc$ cat vm.args ## Name of the riak node-name myapp@127.0.0.1## Cookie for distributed erlang-setcookie myapp## Heartbeat management; auto-restarts VM if it dies or becomes unresponsive## (Disabled by default..use with caution!)##-heart## Enable kernel poll and a few async threads+K true+A 5## Increase number of concurrent ports/sockets-env ERL_MAX_PORTS 4096## Tweak GC to run more often -env ERL_FULLSWEEP_AFTER 10## Include .beam files for site.-pa ./site/ebin## Run code at startup.-eval "application:start(myapp)"


删除掉myapp下的src目录
修改start.sh文件属性

 

chmod 777 start.sh

测试一下:

 

这里是开发环境,已经OK

 

下一步进行打包版本的修改

 

把nitrgen/rel下的overlay文件夹,overlay_mochiweb文件夹,mochiweb.config文件,rebar文件拷贝到myapp/rel目录下

修改mochiweb.config文件名为myapp.config,修改内容

 

 

修改myapp/rel/overlay/bin目录下的nitrogen文件,重命名为myapp

把myapp/etc下的app.config文件与vm.args文件拷贝到myapp/rel/overlay/etc下替换掉之前的文件

把myapp/etc下的mochiweb.config文件拷贝到myapp/rel/overlay_mochiweb/etc下替换掉之前的文件

把myapp/site/ebin/myapp.app文件文件拷贝到myapp/rel/overlay_mochiweb/site/ebin目录下删除掉之前的文件

把myapp/site/src/下的myapp.app.src,myapp_app.erl,myapp_sup.erl文件拷贝到myapp/rel/overlay_mochiweb/site/src目录下删除掉之前的文件

一切ok

测试一下

 

 

启动成功,ok

 




分享到:
评论
2 楼 李政道 2017-03-03  
我还是个新手,我百度来半天没有解决到这个问题,请问你知道是什么原因么,麻烦帮我看哈这个问题怎么解决,非常感谢你的这篇博客。
1 楼 李政道 2017-03-03  
你好,我把你的工程下载下来:

  rebar compile


  然后 执行 start.sh


  没跑起来,报错  Conflicting -start_erl and -config options

  我试了另一种方式:

  执行  make rel 报错

  {"init terminating in do_boot","Module mochiglobal potentially included by two d
ifferent applications: mochiweb and nitrogen."}
 

相关推荐

    erlang mochiweb-test demo

    这个 "erlang mochiweb-test demo" 压缩包很可能是为了展示如何使用 Mochiweb 在 Erlang 中构建一个简单的 Web 应用程序或测试环境。 Mochiweb 的核心组件包括以下几个部分: 1. **HTTP 服务器**:Mochiweb 提供了...

    mochiweb实例

    这个实例将帮助我们理解Mochiweb是如何工作的,并如何使用它来构建一个简单的Web服务器。Erlang是一种并发性极强、容错性高的语言,特别适合构建分布式系统,而Mochiweb则是Erlang生态系统中的一个重要组件。 首先...

    mochiweb:MochiWeb 是一个用于构建轻量级 HTTP 服务器的 Erlang 库

    name PREFIX=$HOME/projects/ 有关 Rebar(Erlang 构建工具)的信息可在MochiWeb 目前已使用 Erlang/OTP 18.3 到 24.0 进行测试,但仍可能兼容回 R15B-03。OTP 21.2、21.2.1、21.2.2 警告OTP 21.2(直到并包括 ...

    基于mochiweb的聊天室

    这个基于Mochiweb的聊天室项目展示了Erlang和Mochiweb在构建实时网络应用上的强大能力。通过学习和分析这个项目,开发者可以深入理解Erlang的并发模型、Mochiweb的工作原理,以及如何利用它们构建高效、可靠的Web...

    使用rebar工具开发erlang工程项目和发布erlang工程项目学习.pdf

    rebar 是一个 Erlang 构建工具,可以方便的编译测试 Erlang 应用程序和发布。下面是详细的知识点: 一、建立一个工程项目 在建立一个 Erlang 工程项目时,需要首先安装 Erlang 和 Git 代码管理系统。在 Ubuntu ...

    erlang实战IP查询服务

    - 配置`$ERL_LIB`路径,以便自动加载Mochiweb。 2. **获取依赖**: - 通过SVN检出Mochiweb。 - 获取GeoIP数据库并解压。 - 获取egeoip客户端库。 3. **编写代码**: - 实现`gen_server`行为的各个回调函数。 - ...

    Erlang的高级特性和应用

    4. Mochiweb - 用于构建高效的Web服务器和HTTP客户端的Erlang库 5. Disco - 分布式计算框架 **Erlang 与操作系统的比较** Erlang 采用函数式编程范式,与传统的Unix操作系统(通常使用C++)有所不同。在Erlang中,...

    erlang web frame

    在Erlang Web框架中,Mochiweb和Cowboy通常被用于构建RESTful API、实时Web应用或者作为其他复杂系统的一部分。这些框架充分利用Erlang的actor模型,实现了进程间的异步通信,从而在处理高并发场景时能保持良好的...

    mochiweb:Mochi Media出色的HTTP库的一个分支-可以在https上找到其规范源

    MochiWeb是一个Erlang库,用于构建轻量级的HTTP服务器。 最新版本的MochiWeb可从获得。 MochiWeb的邮件列表位于 R12B兼容性:MochiWeb的母版已通过R14A及更高版本进行了测试。 与R12B兼容的分支在单独维护。为方便...

    erlang-rpssl-comet:使用Mochiweb和Comet技术的Erlang网页游戏-Rock-Paper-Scissors-Spock-Lizard

    RPSSL彗星 RPSSL-Rock-Paper-Scissors-Spock-Lizard是一款简单但着名的2人游戏。 通常,它是第一人称自己玩的,但这是网络版本。 ... ... 因为它使用的资源很少,所以我们可以使其永远处于阻塞状态,并保持连接处于打开...

    Good for restful API

    该框架基于Mochiweb(一款用Erlang编写的Web服务器)构建,旨在帮助开发者轻松构建遵循HTTP语义的服务,同时避免了在业务逻辑中直接处理HTTP相关的复杂性。 ##### 原则 - **默认行为**:Webmachine实现了一些默认...

    JavaScript + Delphi + ErLang讲座内容(4)

    首先,`all.bat`可能是一个批处理文件,用于自动化执行一系列命令或启动相关程序,方便用户快速地运行或测试演示内容。 `JavaScript_Delphi_ErLang.ppt`和`.pptx`是PowerPoint演示文稿,通常包含详细的教学材料,如...

    erlang websocket

    在Erlang中,我们可以使用`jsx`或`jiffy`库来解析和序列化JSON数据。 2. **Erlang与JSON的互转**:通过Erlang的JSON库,可以轻松地将Erlang术语转换为JSON字符串,反之亦然。这对于Erlang和Websocket之间的数据交换...

    CloudFoundry - The building of the Open PaaS Presentation

    4. **简化流程并提高速度**:通过简化部署过程和提高自动化水平来加快应用的交付速度。 #### 五、Cloud Foundry的构建方式 1. **内核与编排器外壳**:Cloud Foundry采用了内核与编排器的设计,构建在IaaS之上。 -...

    Erlang与云计算.pdf(确保可以打开)

    - **MochiWeb**:一个高效的Web服务器,适用于构建云服务的前端。 ### 总结 综上所述,Erlang作为一种面向并发的编程语言,在云计算领域有着广泛的应用前景。无论是通过内置的分布式支持还是通过强大的并发机制,...

    awesome-erlang:精湛的Erlang框架,库和软件的精选列表

    很棒的精选的Erlang框架,库和软件的精选列表。... 基于Erlang / OTP的分布式MQTT消息代理。... -Lisp风味Erlang(LFE) -Erlang Web MVC,现在具有Comet功能 -MochiWeb是用于构建轻量级HTTP服务器的Erlang库。

    Erlang实战

    - **遵循标准目录结构**:采用标准的OTP目录结构,使项目更加规范化,便于他人理解和使用。 - **合理利用行为**:根据业务需求选择合适的行为来组织代码,提高代码的可读性和可维护性。 - **注重性能优化**:采用...

    Erlang高级应用和原理

    全局名称服务、节点心跳检测、自动故障转移和接管机制以及gen_server行为等OTP组件,为分布式系统的构建提供了强大的支持。Erlang的分布式数据库Mnesia则提供了一种实时性较强、支持水平分割和数据冗余的解决方案,...

    simple_bridge:一个简单,标准化的Erlang HTTP服务器接口库

    通过创建标准化接口,SimpleBridge减轻了对多个Erlang HTTP服务器进行编码的麻烦。 它目前支持Cowboy,Inet,Mochiweb,Webmachine和Yaws。 SimpleBridge用作两个最受欢迎的Erlang Web框架到Web服务器的桥梁: 和 ...

Global site tag (gtag.js) - Google Analytics