配合对 package.loaded 的 hack 是否可以绕过缓存的问题?另外修改 path 似乎也可以在 package.preload 或 loaded 里做。
-- init_by_worker.lua
package.loaded = setmetatable(package.loaded, {
__newindex = function(loader, module, value)
rawset(loader, ngx.var.package_path .. module, value)
end,
__index = function(loader, module)
return rawget(loader, ngx.var.package_path .. module)
end
})
在 2017年3月29日星期三 UTC+8上午10:02:33,FQ Liu写道:
这种方式恐怕无法实现你想要的效果。
通过require引入的库是会缓存下来的,
而缓存是以require的参数为key的。如对于local http = require "resty.http". Lua会加载lua-resty-http库,同时以“resty.http"为Key将加载的库保存下来,
下次再通过reqiure调用时会直接返回缓存的内容,即使你更改了package.path也不会生效的。
通过require来实现更好一些,自己实现了个require方法,替换Lua默认的。
对host1, require "path1.XXX"
对host2, require "path2.XXX"
不过很少有人会这样做吧。
在 2017年3月28日星期二 UTC+8下午2:02:16,Ding Mingxin写道: