目录结构

│  Emakefile
│ make.bat
│ start.bat
├─config
│ config.config
│ server.app
├─ebin
│ wulin_app.beam
│ wulin_sup.beam
│ util.beam
│ demo.beam
├─logs
│ debug.log
└─src
wulin_app.erl
wulin_sup.erl
util.erl
demo.erl

config 配置目录

ebin 编译输出目录

logs 日志输出目录

src 源代码目录

Emakefile(编译配置)

{["src/*"],[{outdir, "ebin"}]}.

src/* 表示编译src目录下所有的源代码文件

outdir 指定编译后的beam文件输出目录

make.bat(编译命令)

erl -make all

start.bat(启动app)

cd config
erl -name wulin@192.168.1.1 -setcookie mywulin -boot start_sasl -noshell -config config -pa ../ebin/ -s wulin_app start

-noshell 禁止输入

-config xxx 加载文件名为xxx.config的配置

-pa 指定目录

-s xxx yyy 启动xxx模块的yyy函数

config.config(env变量)

[
{
sasl,
[
{sasl_error_logger, false},
{errlog_type, error},
{error_logger_mf_dir, "../logs"},
{error_logger_mf_maxbytes, 1048760},
{error_logger_mf_maxfiles, 10}
]
},{
ab,
[]
}
].

可以在程序内使用application:get_env/2获取这里定义的变量

示例:application:get_env(sasl, error_logger_mf_dir). 返回{ok,"../logs"}

server.app

{
application, server % 对应文件名
, [{description, "Server"}
, {vsn, '1.0a'}
, {modules, []}
, {registered, []}
, {applications, [kernel, stdlib, sasl]} % 依赖库
, {env, [{author, "demo"}]}
, {mod, {wulin_app, [12321]}} % 依赖模块,主模块
, {start_phases, []}]
}.

server(app名)必须和server.app(文件名)一致

wulin_app.erl

-module(wulin_app).
-behaviour(application).
-export([start/2,start/0, stop/1]). start() ->
application:start(server). start(_Type, [A]) ->
util:debug("Server Starting.... ~p ~n", [A]),
util:debug("Server Starting.... ~n", []),
{ok, Pid} = wulin_sup:start_link(),
util:debug("Server Started in ~p ~n", [Pid]),
{ok, Pid}. stop(_State) ->
io:format("Server Stoped..... ~n").

application:start(server)中的server对应server.app中的server

wulin_sup.erl

-module(wulin_sup).
-behaviour(supervisor). -export([start_link/0,init/1]). start_link() ->
supervisor:start_link({local,?MODULE}, ?MODULE, []). init([]) ->
{ok, {{one_for_one, 3, 10},[
{demo, {demo, start, []}, permanent, 10000, worker, []}
]}}.

demo.erl

-module(demo).

-export([start/0]).

start() ->
util:debug("xxxxx ~n", []),
{'ok', self()}.

util.erl

-module(util).
-export([debug/2]). debug(F, Args) ->
{ok, LogPath} = application:get_env(sasl, error_logger_mf_dir),
File = LogPath ++ "/debug.txt",
{ok, Steam} = file:open(File, [write, append]),
io:format(Steam, F, Args),
file:close(Steam).

debug.log

Server Starting.... 12321
Server Starting....
xxxxx
Server Started in <0.49.0>

流程

start.bat -> wulin_app:start/0 -> server.app ->

wulin_app:start/2 -> wulin_sup:start_link/0 -> demo:start/0

Erlang学习记录:app demo的更多相关文章

  1. Erlang学习记录:输入和输出

    输入和输出 输入和输出功能都被定义在io模块 输出功能非常常用,由于erlang项目没有可断点调试的IDE(或者说根本不需要),所以所有的调试操作都是由io输出 来调试的 io:get_line/1. ...

  2. Erlang学习记录:语法和特性

    特性 大下排序:number < atom < reference < fun < port < pid < tuple < list < bit st ...

  3. Erlang学习记录(三)——表达式大集合

    Erlang中的表达式必须以.结束才会去执行.如果不加.你在编译环境下按多少次Enter,表达式都不会执行,表达式之间可以用,分隔,以.结尾后所有的表达式都会执行,但是只有最后一个以.结尾的表达式会在 ...

  4. Erlang学习记录(二)——基本数据类型

    Erlang可以说和我以前接触过的语言都大不相同,这个从它的类型定义就可以看出来...反正学起来觉得既不熟悉,也不亲切,我估计在用Erlang写应用的时候,整个编程思路都要变一下了.不过存在即是合理的 ...

  5. Erlang学习记录(一)——Windows下的环境搭建

    一.安装编译器 在http://www.erlang.org/download.html下载R16B01 Windows Binary File并安装. 二.运行编译器 安装完编译器后,打开安装目录下 ...

  6. Erlang学习记录:相关工具和文档

    在线工具和文档 网址 说明 OTP Reference Page Index 内置模块查询 Erlang/OTP Applications N Kernel Reference Manual 入门官方 ...

  7. Erlang学习记录:转义

    转义 转义序列 含义 整数编码 \b 退格符 8 \d 删除符 127 \e 换码符 27 \f 换页符 12 \n 换行符 10 \r 回车符 13 \s 空格符 32 \t 制表符 9 \v 垂直 ...

  8. Erlang学习记录:运算符

    数学运算符 说明 详细 符号 加减乘 +-* 浮点数除 结果为浮点数 / 整数除 除数和被除数都必须是整数,结果为整数 div 整数取余 rem 逻辑运算符 说明 符号 详细 and 前后两个值都为真 ...

  9. Django学习笔记----settings and database_based App demo

    原文参考docs.djangoproject.com, what can manage.py utility do? find here. 1.Database Setup 编辑settings.py ...

随机推荐

  1. 关于阿里云 ETC服务器 端口开放问题

    今天整了个阿里云,为了开放一个端口 各种入出规则整了半天 最后连一个hello world都发不出来.. 最后的最后 才知道 开端口除了做入规则操作 还得调一下阿里的控制台 当你也买了个ECS不要像我 ...

  2. 8、如何实现可迭代对象和迭代器对象 9、如何使用生成器函数实现可迭代对象 10、如何进行反向迭代以及如何实现反向迭代 11、如何对迭代器做切片操作 12、如何在一个for语句中迭代多个可迭代对象

    8.如何实现可迭代对象和迭代器对象 PS:注意重载Iterator方法的时候,需要和原来的方法名一样,否则创建实例时会报错 from collections import Iterator,Itera ...

  3. 如何在vue-cli 中适当的配置,来满足自己项目需求 ?

    1. 改变index.js 中端口号host host:'localhost' 改为 host: '0.0.0.0' 然后换成自己的ip 访问: 2. 在vue 中运行cnpm run start 中 ...

  4. Unity3D中画拉选框(绘制多选框)

    问题分析: 需要根据鼠标事件,摁下鼠标开始绘制选择框,抬起鼠标结束绘制. 实现思路: 该需求是屏幕画线,Unity内置了GL类  封装了OpenGL,可以通过GL类来实现一些简单的画图操作,这里也是使 ...

  5. Hive之explode和lateral view

    Hive之explode 一. explode, 行转列. 1.1. 用于array类型的数据 table_name 表名 array_col 为数组类型的字段 new_col array_col被e ...

  6. sudo dpkg --configure -a无法解决的问题

    系统升级及新立得启动时出现的问题,还不能安装软件 E: dpkg 的操作被中断了, 您必须手动执行 'sudo dpkg --configure -a' 以修复这个问题. E: _cache-> ...

  7. C/C++通用Makefile

    最近的项目又回到了Linux上运行,这就需要在Linux下编译项目,写Makefile针对习惯了Windows的程序员来说是一件痛苦的事,如果有一个通用的Makefile该多好啊,本着这样的目的,我再 ...

  8. Homestead 安装其它的PHP版本

    运行环境: 系统: win10 软件: virtualbox 6.2 vagrant 2.2.4 homestead 7.1.0 sudo apt-get update sudo apt-get -y ...

  9. linux服务器创建docker

    关于Docker在Linux服务器中的安装以及使用1 安装: yum install docker 2 启动: systemctl start docker.service 3.加入开机启动: sys ...

  10. Vue Router高级

    路由组件传参 通过props解耦 const User = { props: ['id'], template: '<div>User {{ id }}</div>' } co ...