一 配置文件中指令加载
① 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

![]()