大家好,春哥好~
在ngx-lua中,最常用的debug方法应该就是在报500后根据nginx错误日志来定位错误原因,一般Lua语法错误都会很清楚的标明是哪个文件哪一行。
但是在使用ngx.exit()时,发现如下问题,以下内容都是在一个content_by_lua的Lua文件里:
(1)代码为:
local d = nil
if true then
return ngx.exit(d)
end
此时错误信息为:
2014/05/15 13:38:03 [error] 14467#0: *30 lua entry thread aborted: runtime error: bad argument #1 to '?' (number expected, got nil)
没有任何文件和行数的信息
(2)代码为:
local d = nil
ngx.exit(d)
此时错误信息正常,有文件和行数的信息。
(3)代码为:
local d = nil
return ngx.exit(d)
此时的错误信息是:
failed to load external Lua file "/etc/nginx/actions/proxy_action.lua": /etc/nginx/actions/proxy_action.lua:20: 'end' expected (to close 'function' at line 1) near 'local'
所以归纳一下,我的问题是:
(1)为什么在文件中直接return ngx.exit(xxxx),会报错,并提示说 'end' expected (to close 'function',而在一个if语句中执行return ngx.exit(xxxx),就不会有这个问题,此时它只是在if中,并不是在一个function中。
(2)为什么在(1)中,如果在if语句中执行return ngx.exit(xxxx),如果xxxx不为nil,且合法,则一切正常;如果xxxx为nil,错误信息中则不会提示任何文件和行数的信息。
谢谢各位大神解答