目录结构

│  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. linux 上挂载硬盘或者读取u盘数据

    查看服务器上有哪些设备 df -hl查询挂载 硬盘后或者插上u盘后sda 的变化,新增的就是我们添加上的. fdisk -ls /dev/sda

  2. js 点击获取验证码后的倒数60s

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <script ...

  3. vue 在微信中设置动态标题

    1.安装插件 cnpm install vue-wechat-title --save 2.在main.js中引入 import VueWechatTitle from 'vue-wechat-tit ...

  4. BBS论坛 home主页与个人站点主页

    五.Home主页与个人站点主页 home首页代码: # views.py视图函数部分代码def home(request): # 将数据库中的所有文章展示到主页 article_list = mode ...

  5. u-boot 移植工作目录

    1. 添加工作用户 [root@localhost ~]#useradd -G root -g root -d/home/uboot uboot 2. 建立工作目录 [uboot@localhost ...

  6. docker Dcokerfile学习---构建nginx环境

    1.创建项目目录并上传包 $ mkdir docker_nginx $ cd docker_nginx 下载nginx包 $ wget http://nginx.org/download/nginx- ...

  7. nodejs 模板引擎ejs的简单使用(3)

    1.ejs <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...

  8. 解决 AUTH` failed: ERR Client sent AUTH, but no password is set [tcp://127.0.0.1:6379]

    页面报错: ConnectionException In AbstractConnection.php line 155 AUTH` failed: ERR Client sent AUTH, but ...

  9. Centos7.5 安装sonarqube-7.1

    下载sonarqube-7.1 wget -t 0 -c https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.1.z ...

  10. H5新增的postMessage跨域解决方案Demo

    Demo背景:html中使用iframe嵌入了跨域的vue项目,在html中将参数传入到跨越的vue项目中. 向跨越的子窗口中发送数据 function sendMessage(data) { // ...