一 配置文件中指令加载
① openresty提供 lua_package_path
++++++++"细节"++++++++
0、默认
1)会以'环境变量 LUA_PATH 的值'来初始这个环境变量 -->实际'未生效(不管是通过设置env或者shell
设置export)'
2)如果'没有找到'该环境变量,则使用一个'编译时定义的默认路径'来初始化
1、? 表示'文件名'
2、;; --> '新加'的路径后面'加上'原来的'默认'路径 -->'推荐'
3、${prefix}是openresty指定的'安装'目录
(1)rpm安装默认的查找路径
说明:package.path表明lua文件的'搜索'路径,也是'require'、'dofile(存疑)' 加载文件的路径
(2)路径分割符
+++++++++++ "操作系统文件分割符" +++++++++++
package.config:sub(1,1).它返回'路径'分隔符;它'\\'位于Windows和'/'Unix上
场景: 做'路径'字符串'拼接'
查找细节:
1)require 'a.b' --> 会将'.'转换为'路径分割符'
2)require或dofile的'字符串'就会替换对应的'问号?'
3)在'package.path'路径中寻找文件
(3)哪些指令使用
*_by_lua -->在配置文件中'嵌入'lua代码字符串
细节点: 本质还是通过代码字符串中的'reuire'或 'dofile(存疑)'加载,然后使用'package.path'查找
local p = "/home/wzj/work/"
local m_package_path = package.path
package.path = string.format("%s?.lua;%s?/init.lua;%s", p, p, m_package_path)
++++++++++++ "分割线" ++++++++++++
package.cpath = "../wzj/bin/?.so;"..package.cpath
② 相对路径
(1)openresty|lua的安装目录
(2)哪些指令在prefix寻找目录
openrest中'相关指令':*_by_lua_file
补充:nginx中所有'指令中'指定的'相对'路径都是针对'--prefix'而言
(3)案例讲解
说明: '业务'代码和配置文件'解耦' -->推荐'*by_lua_file'的形式
++++++++++ require'和'dofile ++++++++++
共同点: 查找'lua'代码的路径都是package.path,都是'执行'代码
差异点:
1)require只会在'第一次'加载文件的时候'执行'里面的代码,后续'不再重复'执行;
2)dofile每次加载'都会'执行
说明: 强烈推荐使用'require'
思考: 设置为'off'为什么不生效?
补充:
1)如果 lua_code_cache 指令是'off'
2)init_by_lua 处理程序将在'每个请求'上都'运行'一次,因此这种特殊模式下,总是每个请求创建一个'独立'的 Lua VM