大家好,
但它的局限在于:
. 必须在感兴趣的 location handler 中增加代码. . 必须让 nginx 以非 daemon 的方式来运行.
这两个限制导致了它一般只能用于开发调试阶段. 如果想像其他语言比如 erlang, 可以在生成环境有一个 live debugging 的 shell. lua-resty-repl 就无能为力了.
lua-resty-console 分为两个部分, 使用方式和 redis-cli 类似. 一个是 backend, 在 nginx.conf 增加一个 location 执行 backend 逻辑. 另一个是 client. 连接 backend 检查 openresty 的状态.
一个典型的使用场景是查看 shared.DICT 的状态, 示例如下. 可以直接调用 ngx.shared.DICT 的方法, 比如 get_keys(), add(), delete() 等来查看/改变 shared.DICT. 另外, 深度集成 libreadline, 所以自动补齐, 命令行历史都是支持的. (当然, 这部分功能是从 lua-resty-repl 继承来的).
另外还有一些高级的玩法, 比如可以替换已加载模块的某一个方法. 实现类似于 hook 的功能. 实时打印一个方法的参数/返回值 之类.
更多细节查看项目 README. 欢迎大家试用. 有问题的话可以提 issue. 谢谢.
./nickr
[9] ngx(content)> ngx.config.prefix()
=> /workspace/lua-resty-console/
[10] ngx(content)> ngx.config.ngx_lua_version
=> 10011
[11] ngx(content)> ngx.config.nginx_configure()
=> --prefix=/usr/local/Cellar/openresty/1.13.6.1/nginx --with-cc-opt='-O2 -I/usr/local/include -I/usr/local/opt/pcre/include -I/usr/local/opt/openresty-openssl/include' --add-module=../ngx_devel_kit-0.3.0 --add-module=../echo-nginx-module-0.61 ...
[12] ngx(content)> ngx.sha →→
ngx.sha1_bin() ngx.shared.
[12] ngx(content)> ngx.shared. →→
ngx.shared.mycache. ngx.shared.metrics.
[12] ngx(content)> c = ngx.shared.mycache
=> nil
[13] ngx(content)> c
=> { <userdata 1>,
<metatable> = <1>{
__index = <table 1>,
add = <function 1>,
delete = <function 2>,
flush_all = <function 3>,
flush_expired = <function 4>,
get = <function 5>,
get_keys = <function 6>,
get_stale = <function 7>,
incr = <function 8>,
llen = <function 9>,
lpop = <function 10>,
lpush = <function 11>,
replace = <function 12>,
rpop = <function 13>,
rpush = <function 14>,
safe_add = <function 15>,
safe_set = <function 16>,
set = <function 17>
}
}
[14] ngx(content)> c:set('a', 1)
=> true
[15] ngx(content)> c:get('a')
=> 1
[16] ngx(content)> c:get_keys()
=> { "a" }
|