OpenResty最佳实践
目录
如果你正在学 Lua 与 openresty,那你就一定知道在开发过程中,调试代码、单元测试是多么的麻烦。这里整理了一些 lua 开发的最佳实践。
简介
openresty 中 lua ide 调试,单元测试比较麻烦;lua 对库的管理比较散漫。在公司生产环境,一般没有外网环境,OpenResty 的安装和 lua 项目的部署都比较麻烦。 结合 Python 的一些经验,在这里整理一下自己对 Lua 的理解,以及 Lua 最佳实践。
OpenResty 安装
对于软件,使用编译方式安装比较好,比如 Ubuntu,apt-get 安装的包一般都会比较旧。如下介绍我的编译参数。这里需要自己下载自己的依赖包:naxsi, nginx-goodies-nginx-sticky-module-ng,pcre,openssl,zlib,并根据我的配置进行修改相应参数
|
|
- 这里是一个比较好的 nginx 的笔记,可以过一遍
- 我在学习的时候,看了这本书深入理解 Nginx 模块开发与架构解析,毕竟讲的比较系统,可以借鉴一下
- 有问题,知乎,搜索引擎
安装 luarocks
|
|
lua 面向对象
lua 借助 table 以及 metatable 的概念进行 oo 的。这里摘了一个博客的代码,看起来还可以。以后可以使用这个。Lua 中实现面向对象。
这里要说一下 lua 中.运算和:的区别,a={};a.fun(a, arg) 等价于 a:fun(arg),其实就是:
可以省略 self 参数。
|
|
基本编码规范 设计
可以参考 OpenResty 的最佳实践,平时用起来,大部分跟 c 的风格差不多吧。主要是所使用的代码风格要统一。
包管理
lua 下有两个包管理系统,LuaDist 和 LuaRocks
单元测试
- 重点 如下方法请在命令行中使用类似
curl localhost/unittest
进行测试,浏览器中看会很痛苦 - OpenResty 最佳实践-单元测试给出一种方法。我的处理方法是,在 nginx.conf 中的 server 中建一个单独的 location,content_by_lua_file 设置 unittest.lua。公司用的 verynginx,所以我把此配置放到了 router.lua 中(当然配置方法类似,这个很容易研究,就不放到这里了)。
|
|
- 如上有一个很有意思的地方,
error(msg or "error", 2)
,其中的 2 有些讲究,表示返回调用函数所在行,还有 0(忽略行号),1(error 调用位置行号) - 性能测试 代码覆盖率 API 测试等,都可以去OpenResty 最佳实践中找,配置很简单。
远程调试 OpenResty
- 对于此部分,对于有些人来说,使用日志就已经足够了。可对于有些时候,在代码中太多的日志有不利于维护。这里自己要尽力做好日志和调试的平衡吧。
- 此调试方法适用于 win linux osx
- 先贴这里用到的 luaIDE 地址:ZeroBraneStudio
- 如下为安装步骤:
- 下载这个项目,ZeroBraneStudio,解压可以直接用【调试方法在下载好的文件中 README.md 中有相应的链接】
- 启动 ZBS,Project -> Start Debugger Server
- 复制
/lualibs/mobdebug/mobdebug.lua -> nginx lua path, - 复制
/lualibs/socket.lua -> nginx lua path, - 复制
/bin/clibs/socket/core -> socket 设为 nginx lua cpath(调试时候,使用的是 require(“socket.core”)形式导入包。这里需要注意 core 文件后缀,win 是 dll,linux 是 so,) - nginx 配置好,将如上依赖加到 nginx.conf 中,让 lua 可以找到这些文件即可
- 创建需要调试的 lua 文件
|
|
注:start()呼叫需要运行 IDE 的计算机的 IP 。默认情况下使用“localhost”,但是由于您的 nginx 实例正在运行,因此您需要指定运行 IDE 的计算机的 IP 地址(在我的例子中 192.168.1.22)
- 在 ide 中打开需要调试的如上 lua 文件
- Project -> Project Directory -> Set From Current File。
- 此时,打开浏览器,访问需要此文件处理的链接
- 此时开始调试
- 注:在最下侧有 Remote console,在这里可以执行任何 ngx lua 语句
- 如上流程没有截图,或者没有说清楚,可以来这里
nginx 一些技巧
- 看我配置的 nginx.conf
|
|
资料
- 章亦春
- OpenResty
- OpenResty 最佳实践
- Lua 5.1 参考手册
- Lua 5.3 参考手册
- 云风 github
- awesome-lua
- awesome-resty
- Nginx-Lua-OpenResty-ResourcesA collection of resources covering Nginx, Nginx + Lua, OpenResty and Tengine