lua代码调试遇到的坑
openresty启动时,通过 init_worker_by_lua_file D:\init.lua的方式加载文件,如果lua代码中有错误,则error日志中未打印出错误信息。比如以下代码:1、连接一个值为nil的变量local angx.log(ngx.WARN, "value:" .. a)ngx.log(ngx.WARN, "Successfully print the value of
一、未正常打印错误日志
openresty启动时,通过 init_worker_by_lua_file D:\init.lua 的方式加载文件,如果lua代码中有错误,则error日志中未打印出错误信息。
比如以下代码:
1、连接一个值为nil的变量
local a
ngx.log(ngx.WARN, "value:" .. a)
ngx.log(ngx.WARN, "Successfully print the value of a")
2、读文件时,如果文件test.lua不存在
local f = assert(io.open("test.lua", "r"))
local data = f:read("*all")
f:close()
3、写文件时,如果路径 D:\\lua\\file\\ 不存在
local f = assert(io.open("D:\\lua\\file\\test.lua", "w"))
f:write(data)
f:close()
类似以上情况的异常,在openresty启动的时候,都未在日志中打印出来,但是程序已经终止执行了,在调试时需要注意下。
目前没有好的办法,只是在需要的地方加入了一些额外的输出日志,以此来判断是否成功执行。
二、attempt to index global 'ngx' (a nil value)
module(...)
function test()
ngx.log(ngx.WARN, "这是一个测试")
end
在test.lua文件中有如上代码,执行该test函数时,报错:attempt to index global 'ngx' (a nil value)。此时只需要在文件中加入以下代码即可:
local ngx = ngx
或
module(...)改成module(...,package.seeall)
三、语法
1、子请求
local res1, res2 = ngx.location.capture_multi {
{"/test1/index.html"},
{"/test2/index.html" .. ngx.var.request_uri},
}
注意:capture_multi后面是“{”,而不是“(”;capture_multi中最后一个请求后面,逗号“,”可有可无
四、获取Cookie
获取所有cookie: ngx.var.http_cookie, 这里获取的是一个字符串,如果不存在则返回nil 。
获取单个cookie: ngx.var.cookie_username, 获取单个cookie,_后面的cookie的name,如果不存在则返回nil 。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)