openresty重定向外部的lua目录
openresty重定向外部的lua目录
背景:
目前暂定采用nginx.exe所在目录外的lua文件,因为不想把nginx.exe所在目录纳入版本控制管理,也不想添加git过滤目录。
解决方案:
方案1:
1.因为每个worker和master进程都需要设置lua的搜索路径,通过以下方式设置。
package.path = package.path .. ';'..current_dir..'/../lua_src/?.lua'
(问号通配的是require的参数,或根据系统,将点号替换成斜杠或者反斜杠,如果是pc就会替换成反斜杠。)
2.如果需要相对于nginx.exe所在目录的相对路径,那么可以通过如下方式获取。
local current_dir = debug.getinfo(1, "S").source:sub(2)
current_dir = current_dir:match("(.*/)") or "" -- 如果参数是相对路径,则获取的也是相对路径。
为什么不采用如下方式,是因为pc下如果没有故意添加pwd命令的话pwd命令是缺失的。
local file = io.popen("pwd")
local current_dir = file:read("*l")
3.设置时机应该是每个进程启动时,可以通过openresty的init_by_lua或者init_worker_by_lua选项进行设置。
在nginx.conf的http闭包中添加该选项的设置,如下图。
关于调试:
如果文件搜索不到,可以通过nginx.exe所在目录下的log/error.log查看报错日志,确认是否有找不到文件的报错。