`
yuhaitao6688
  • 浏览: 15341 次
  • 性别: 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 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人游戏。 通常,它是第一人称自己玩的,但这是网络版本。 ... ... 因为它使用的资源很少,所以我们可以使其永远处于阻塞状态,并保持连接处于打开...

    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之间的数据交换...

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

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

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

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

    webmachine:用于构建Web应用程序的基于REST的系统

    Webmachine是一个应用程序层,它在mochiweb提供的出色的按位和HTTP语法管理的基础上增加了HTTP语义意识,并提供了一种简单明了的方式将其连接到应用程序的行为。 可获得更多信息。 您还可以阅读有关Webmachine的...

    web1

    - Erlang有许多Web开发框架,如Yaws、Mochiweb和Cowboy等。"web1"项目可能采用了其中一种,这些框架提供了HTTP服务器、路由处理和模板渲染等功能,帮助快速构建Web应用。 6. **数据持久化与数据库集成**: - ...

    heroku-genfsm:一个Heroku Erlang应用程序-Genfsm

    heroku-genfsmAn experimental Erlang app which deployed on HerokuSome Deploy Detail在 Heroku 上部署 Webmachine + Mochiweb + ErlyDTL 组合的 Erlang Web 应用

    awesome-web-scraper:令人敬畏的Web scaper,爬虫的集合

    很棒的网络刮板 支持 令人敬畏的Web scaper,爬虫的集合。 Java ...开源Web爬虫,建立在nosql数据库(apacheouchdb,riak),AMQP数据库(rabbitmq),webmachine和mochiweb之上。 Python scrap

    elli:简单,健壮和高性能的Erlang Web服务器

    Erlang因其并发处理和容错能力而闻名,elli则充分利用了这些优势,为开发者提供了一个稳定且高效的平台来构建分布式、实时和低延迟的Web应用。 **Erlang语言** Erlang是一种面向并发的函数式编程语言,由瑞典电信...

    Webmachine.zip

    Webmachine 是一个应用层,为 mochiweb 提供 HTTP 语义的特性,定义一个简单而清晰的连接应用的方式。 标签:Webmachine Web框架

    prometheus.erl:Erlang中的Prometheus.io客户端

    Erlang是一种并发性极强的编程语言,常用于构建分布式系统,其强大的容错性和实时性使其在电信、金融和在线服务等领域广泛应用。`prometheus.erl` 库为Erlang开发人员提供了一种方便的方式来集成Prometheus监控功能...

    Erlang实现的一个Web服务器代码实例

    Erlang 是一种面向并发和分布式系统的编程语言,特别适合构建高可靠性、容错性强的系统,如Web服务器。在上述代码中,我们看到的...在实际开发中,通常会使用像YAWS、Mochiweb或Cowboy这样的成熟Erlang Web服务器框架。

Global site tag (gtag.js) - Google Analytics