Erlang学习记录:app demo
目录结构
│ 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的更多相关文章
- Erlang学习记录:输入和输出
输入和输出 输入和输出功能都被定义在io模块 输出功能非常常用,由于erlang项目没有可断点调试的IDE(或者说根本不需要),所以所有的调试操作都是由io输出 来调试的 io:get_line/1. ...
- Erlang学习记录:语法和特性
特性 大下排序:number < atom < reference < fun < port < pid < tuple < list < bit st ...
- Erlang学习记录(三)——表达式大集合
Erlang中的表达式必须以.结束才会去执行.如果不加.你在编译环境下按多少次Enter,表达式都不会执行,表达式之间可以用,分隔,以.结尾后所有的表达式都会执行,但是只有最后一个以.结尾的表达式会在 ...
- Erlang学习记录(二)——基本数据类型
Erlang可以说和我以前接触过的语言都大不相同,这个从它的类型定义就可以看出来...反正学起来觉得既不熟悉,也不亲切,我估计在用Erlang写应用的时候,整个编程思路都要变一下了.不过存在即是合理的 ...
- Erlang学习记录(一)——Windows下的环境搭建
一.安装编译器 在http://www.erlang.org/download.html下载R16B01 Windows Binary File并安装. 二.运行编译器 安装完编译器后,打开安装目录下 ...
- Erlang学习记录:相关工具和文档
在线工具和文档 网址 说明 OTP Reference Page Index 内置模块查询 Erlang/OTP Applications N Kernel Reference Manual 入门官方 ...
- Erlang学习记录:转义
转义 转义序列 含义 整数编码 \b 退格符 8 \d 删除符 127 \e 换码符 27 \f 换页符 12 \n 换行符 10 \r 回车符 13 \s 空格符 32 \t 制表符 9 \v 垂直 ...
- Erlang学习记录:运算符
数学运算符 说明 详细 符号 加减乘 +-* 浮点数除 结果为浮点数 / 整数除 除数和被除数都必须是整数,结果为整数 div 整数取余 rem 逻辑运算符 说明 符号 详细 and 前后两个值都为真 ...
- Django学习笔记----settings and database_based App demo
原文参考docs.djangoproject.com, what can manage.py utility do? find here. 1.Database Setup 编辑settings.py ...
随机推荐
- C# WinfForm 控件之dev表格 GridControl
基本用法 1.新建一个winformAPP 放一个gridControl 为gridC 再放一个button 用法与dataGrid一样 代码如下: /// <summary> /// 显 ...
- Straight Master (贪心)
题目如下:A straight is a poker hand containing five cards of sequential rank, not necessarily to be the ...
- kibana 7.* 设置中文 汉化
原文:kibana 7.* 设置中文 汉化 个人博客:forever121.cn kibana 一直是 日志分析 中得力的助手 由于 kibana5.* 6.* 官方并没有支持中文,需要另外下载补丁包 ...
- 《代码大全2》读书笔记 Week4
<代码大全2>第8章:防御式编程 防御式编程的主要思想是子程序应该不因为非法的输入值被破坏,就好比开车时的防御式驾驶:你无法预估其他司机将会做什么,但你要采取措施保证当他人做出危险动作时自 ...
- troff - groff 文档排版系统的 troff 处理器
总览 SYNOPSIS troff [ -abcivzCERU ] [ -d cs ] [ -f fam ] [ -F dir ] [ -m name ] [ -M dir ] [ -n num ] ...
- ASP.NET MVC 解决账号重复登录问题
解决重复登录 用到了 .net 身份票证 和Global全局处理文件 第一步 登录方法 传入用户名 private void GetOnline(string Name) { Hashtable S ...
- Java.util.Map的实现类有那些?
1.HashMap 2.Hashtable 3.LinkedHashMap 4.TreeMap
- zmq的send
int zmq_send (void *socket, zmq_msg_t *msg, int flags); 2.2.1 nt zmq_send (void *socket, void * ...
- jenkins的安装和启用
1.下载Jenkins:下载地址:https://jenkins.io/zh/download/ 2.将Jenkins.war包上传到Tomcat的webapps目录下,本次的目录是/usr/loca ...
- Java——面向对象的特征二:继承性
2.1面向对象的特征二:继承性 ①引入类继承最基本的作用是:代码重用. ②语法 [修饰符列表] class 子类名 extends 父类名{ 类体; } ③子类继承父类以后,父类中声明的属性.方法,子 ...