`
yuhaitao6688
  • 浏览: 15213 次
  • 性别: 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."}
 

相关推荐

Global site tag (gtag.js) - Google Analytics