最小示例如下:
在openresty/lualib/resty下建立两个文件,
call.lua,内容为:
module("resty.call", package.seeall)
function dodbquery(dbname,q)
local mysql = require "resty.mysql"
local db = mysql:new()
db:set_timeout(30000) -- 1 sec
local ok, err, errno, sqlstate = db:connect({
host = "127.0.0.1",
port = "3306",
database = dbname,
user = "root",
password = "passwd",
})
if not ok then
ngx.say("failed to connect: ", err, ": ", errno, " ", sqlstate)
return
end
local res, err, errno, sqlstate = db:query(q)
if not res then
ngx.say("bad result: ", err, ": ", errno, ": ", sqlstate, ".")
return
end
local ok, err = db:set_keepalive()
if not ok then
ngx.say("failed to set keepalive: ", err)
return
end
return res
end
function getcount()
local query="select count(*) as count from SF_SFXXK"
local res = dodbquery("jmsf",query)
return res
end
-- to prevent use of casual module global variables
getmetatable(resty.call).__newindex = function (table, key, val)
error('attempt to write to undeclared variable "' .. key .. '": '
.. debug.traceback())
end
call1.lua,内容为:
module("resty.call1", package.seeall)
function dodbquery(dbname,q)
local mysql = require "resty.mysql"
local db = mysql:new()
db:set_timeout(30000) -- 1 sec
local ok, err, errno, sqlstate = db:connect({
host = "127.0.0.1",
port = "3306",
database = dbname,
user = "root",
password = "passwd",
})
if not ok then
ngx.say("failed to connect: ", err, ": ", errno, " ", sqlstate)
return
end
local res, err, errno, sqlstate = db:query(q)
if not res then
ngx.say("bad result: ", err, ": ", errno, ": ", sqlstate, ".")
return
end
local ok, err = db:set_keepalive()
if not ok then
ngx.say("failed to set keepalive: ", err)
return
end
return res
end
function getcount()
local query="select count(*) as count from person"
local res = dodbquery("tel",query)
return res
end
-- to prevent use of casual module global variables
getmetatable(resty.call1).__newindex = function (table, key, val)
error('attempt to write to undeclared variable "' .. key .. '": '
.. debug.traceback())
end
在openresty/nginx/conf/lua下,建立两个文件,
call.lua,内容为:
local tel = require "resty.call1"
local cjson = require "cjson"
ngx.say(cjson.encode(tel.getcount()))
call1.lua,内容为:
local tel = require "resty.call1"
local cjson = require "cjson"
ngx.say(cjson.encode(tel.getcount()))
在nginx.conf中配置如下:
location /call {
content_by_lua_file conf/lua/call.lua;
}
location /call1 {
content_by_lua_file conf/lua/call1.lua;
}
重启nginx后,
先访问http://XXX/call,出现[{"count":561937}]
访问http://XXX/call1,出现bad result: Table 'jmsf.person' doesn't exist:
1146: 42S02. null
刷新call1几次后,call1的结果正常了,出现[{"count":601}] ,再回过头来访问call,出现bad result:
Table 'tel.SF_SFXXK' doesn't exist: 1146: 42S02. null
所用的是ngx_openresty/1.0.15.11
不知道我把问题说明白了没有。
不知道是我使用的方法有问题,还是一个bug.