在Erlang In Anger第二章中讲到使用rebar来创建一个Erlang项目(Application或Project)

但美中不足的只是给出了指引,但没有给出详细的步骤。

下面我们就使用rebar一步步来创建一个典型的Application。

但在此之前,最好先理解下Erlang In Anger中第二章节所讲关于application结构的部分:http://zhongwencool.gitbooks.io/erlang_in_anger/

 
通过本小节,你可以了解使用rebar加入开源依赖项目的完整步骤。
 
 
1. 下载并安装rebar:
$ git clone git://github.com/rebar/rebar.git
$ cd rebar
$ ./bootstrap
Recompile: src/getopt
...
Recompile: src/rebar_utils
==> rebar (compile)
Congratulations! You now have a self-contained script called "rebar" in
your current working directory. Place this script anywhere in your path
and you can use rebar to build OTP-compliant apps.
为了全局使用rebar,把你的路径加到PATH下:在~/.profile里面加入:
export PATH=$PATH:Your_Rebar_Path
然后重启你的shell或source ~/.profile使它生效
2.创建application:
./rebar create-app appid=autoload
==> rebar (create-app)
Writing src/autoload.app.src
Writing src/autoload_app.erl
Writing src/autoload_sup.erl
生成上面三个模板文件(也可以修改rebar配置自定义模板),
  • myapp.app.src - The OTP application specification用于rebar自动生成.app文件放到ebin/下。
  • myapp_app.erl - An implementation of the OTP Application behaviour:实现你代码逻辑的地方。
  • myapp_sup.erl - An implementation of the OTP Supervisor behaviour (top level supervisor of the application)此application最高等级的监控树。
3.监控指定目录的逻辑是用的开源项目:inotify: https://github.com/sheyll/inotify
   因为不想去自己用erlang实现一个每秒循环监控目录下文件的gen_server【这样很没效率喂!】
   其实把引用依赖项目很简单,只需要在rebar.config里面加入:
{deps, [{inotify, ".*", {git,
"https://github.com/sheyll/inotify.git"}}]}.
4. 编写自己的逻辑:
     4.1 把指定节点名和cookie,指定的监控目录,和log文件存放的位置都放到application的配置文件autoload.app.src中:

{env, [{autoload_path,"./dev_patch/"},   {node_cookie,[{test1@localhost,best},{test2@localhost,best}]},  
{log,"./log/console.log"}]}.

这样设置后就可以在代码里使用:

{ok,NodeCookies} = application:get_env(autoload,node_cookie). 

这样的函数在全局中得到对应的值。

     4.2 建立一个autoload.erl(gen_server)把它放到auto_load_sup监控树下: 在auto_load_sup.erl里面修改:

 init([]) ->
{ok, { {one_for_one, 5, 10}, [?CHILD(autoload,worker)]} }.

4.3 在autoload.erl gen_server里面写逻辑:

其实关键在于如何高效地监控到目录下文件的变化,如果这个搞定啦,其它都是小case。

 
5. 编译代码:

$rebar get-deps
$ rebar compile
6. 启动application
erl -pa "./ebin" -pz "./dev_patch" -sname autoload -s autoload -detached
   把启动命令写到start.sh里面
   这个命令会启动application并把日志记录在log/console.log中
  使用下面命令查看日志:
tail ./log/console.log -f
 
以上就是使用依赖项目创建自己的application的过程,
结论:rebar非常简单好用。
 
 
PS:rebar还集成了release,eunit,coverage statistics doc功能。
如果感兴趣,可以去官网了解下,非常全面的文档哦。
 
参考资料:
1.Rebar github地址:https://github.com/rebar/rebar
2.Erlang In Anger中英对照版本:http://zhongwencool.gitbooks.io/erlang_in_anger/
 

[Erlang27]如何监控指定目录下的*.beam文件,如果有改动就更新到指定的节点?的更多相关文章

  1. [No000073]C#直接删除指定目录下的所有文件及文件夹(保留目录)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. linux复制指定目录下的全部文件到另一个目录中

    linux复制指定目录下的全部文件到另一个目录中复制指定目录下的全部文件到另一个目录中文件及目录的复制是经常要用到的.linux下进行复制的命令为cp.假设复制源目录 为 dir1 ,目标目录为dir ...

  3. c# 获取指定目录下的所有文件并显示在网页上

    参考文献: FileInfo 的使用  https://msdn.microsoft.com/zh-cn/library/system.io.fileinfo_methods(v=vs.110).as ...

  4. php获取指定目录下的所有文件列表

    在我们实际的开发需求中,经常用到操作文件,今天就讲一下关于获取指定目录下的所有文件的几种常用方法: 1.scandir()函数 scandir() 函数返回指定目录中的文件和目录的数组. scandi ...

  5. java压缩指定目录下的所有文件和文件夹的代码

    将代码过程较好的代码段备份一下,下边资料是关于java压缩指定目录下的所有文件和文件夹的代码,希望对码农有帮助. String sourceDir="E:\test";int pa ...

  6. python之查询指定目录下的最新文件

    使用os模块查询指定目录下的最新文件 import os # 输入目录路径,输出最新文件完整路径 def find_new_file(dir): '''查找目录下最新的文件''' file_lists ...

  7. 微软BI 之SSIS 系列 - 在 SSIS 中将指定目录下的所有文件分类输出到不同文件夹

    开篇介绍 比如有这样的一个需求,旧的一个业务系统通常将产出的文件输出到同一个指定的目录下的不同子目录,输出的文件类型有 XML,EXCEL, TXT 这些不同后缀的文件.现在需要在 SSIS 中将它们 ...

  8. linux复制指定目录下的全部文件到另一个目录中,linux cp 文件夹

    linux复制指定目录下的全部文件到另一个目录中复制指定目录下的全部文件到另一个目录中文件及目录的复制是经常要用到的.linux下进行复制的命令为cp.假设复制源目录 为 dir1 ,目标目录为dir ...

  9. C# 删除指定目录下的所有文件及文件夹

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...

随机推荐

  1. [转]FluentData

    本文来自:http://fluentdata.codeplex.com/wikipage?title=Fluency&referringTitle=Home Documentation  Fl ...

  2. Esxi5-管理平台vcenter5.0_数据库迁移流程

    migrating-vcenter-database-express-to-sql-2008-r2 一.      准备环境. ESXi5.0主机      IP:192.168.1.158      ...

  3. java io之管道流

    一.java.io中存在一中流叫管道流,类似管道的功能.PipedOutputStream和PipedInputStream分别是管道输出流和管道输入流.这个两个流必须同时使用. 二.作用:进行两个线 ...

  4. hadoop2.6.0的eclipse插件编译和设置

    编译hadoop2.6.0的eclipse插件 下载源码: git clone https://github.com/winghc/hadoop2x-eclipse-plugin.git 编译源码: ...

  5. Java前期(静态)绑定和后期(动态)绑定

    Java前期(静态)绑定和后期(动态)绑定 程序绑定的概念:绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来.对java来说,绑定分为静态绑定和动态绑定:或者叫做前期绑定和后期绑定. 静态绑 ...

  6. Python中小整数对象池和大整数对象池

    1. 小整数对象池 整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间. Python 对小整数的定义是 [-5, 256] 这些整数对象是提 ...

  7. solr精确查询,查询关键字分词后,指定满足匹配所有

    一.solr查询,查询配置了查询分词器的字段,默认会对查询关键字做分词处理 1.如查询关键字F1501ZY000011,使用solr7自带的中文分词器,默认会分词为:f,1501,zy,000011 ...

  8. 合并SCVMM虚拟机的差异磁盘,并删除那些难以删除的Checkpoints(Shapshots)

    使用Microsoft Data Protection Manager(DPM)有时会造成虚拟机的动态和固定磁盘变成差异磁盘,这个应该与DPM进行差异备份有关,未知原因造成DPM差异备份后无法复原原来 ...

  9. NodeJs-Linux环境初步

    1.Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具. 使用 Express 可以快速地搭建一个完整功能 ...

  10. 使用通配符配置action

    建立struts2wildcard项目,此实例基本仿照前面前面第7点的实例改写而成.为了使用通配符,只需要改写配置文件即可.此实例未使用通配时的配置文件如下: <action name=&quo ...