lua代码调试遇到的坑

一、未正常打印错误日志

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中最后一个请求后面,逗号“,”可有可无

 

 

 

 

 

 

 

 

你可能感兴趣的:(lua)