学习浏览标准文档
一旦您了解了OTP文档的组织方式,就可以更轻松地找到您要查找的内容(您往往需要了解哪些应用程序提供了哪些模块或模块类型).
也只是浏览的应用程序的文档往往是相当有益的-我发现很多非常有用的代码这种方式- ,sys
,dbg
,toolbar
等.
shell erlang和模块erlang之间的区别
Shell erlang与模块erlang略有不同.您无法定义模块功能(仅限于操作),您需要加载记录定义才能使用记录(rr/1
)等.学习如何根据匿名函数编写erlang代码有点棘手,但对于使用远程shell进行生产系统工作至关重要.
学习shell和{start,spawn} _link ed进程之间的交互 - 当你运行一些崩溃的shell代码(引发异常)时,shell进程退出并将退出信号广播到你链接到的任何东西.这将关闭你正在处理的新gen_server.("为什么我的服务器进程一直在消失?")
erlang表达式和保护表达式之间的区别
Guard表达式(when子句)不是Erlang表达式.它们可能看起来很相似,但它们完全不同.Guards不能调用任意的erlang函数,只能调用保护函数(length/1
,类型测试element/2
以及OTP文档中指定的其他函数).警卫成功或失败,没有副作用.另一方面,Erlang表达式可以做他们喜欢的事情.
代码加载
确定代码升级的工作时间和方式,以及让gen_server升级到最新版本的回调模块(code:load(Mod), sys:suspend(Pid), sys:change_code(Pid, Mod, undefined, undefined), sys:resume(Pid).
)的咒语.
代码服务器路径(code:get_path/0
) - 我无法计算我遇到未定义的函数错误的次数,结果是我忘记将ebin目录添加到代码搜索路径.
构建erlang代码
制定一个有用的emake(make:all/0
和erl -make
)和gnu make组合花了相当长的时间(到目前为止大约三年:).
我目前最喜欢的makefile可以在http://github.com/archaelus/esmtp/tree/master上看到
Erlang发行
获取节点名称,dns,cookie以及其他所有权限,以便能够访问net_adm:ping/1
其他节点.这需要练习.
远程shell IO错综复杂
记住要传递group_leader()
给io:format
远程节点上运行的调用,以便输出显示在shell中而不是神秘地消失(我认为SASL报表浏览器rb
在通过远程shell连接使用时将其部分输出发送到错误的节点仍有问题)