Openresty(二十)加载lua文件的一些细节

一     配置文件中指令加载

①  openresty提供  lua_package_path

++++++++"细节"++++++++

0、默认
 
   1)会以'环境变量 LUA_PATH 的值'来初始这个环境变量 -->实际'未生效(不管是通过设置env或者shell
设置export)'

   2)如果'没有找到'该环境变量,则使用一个'编译时定义的默认路径'来初始化

1、? 表示'文件名'

2、;; --> '新加'的路径后面'加上'原来的'默认'路径 -->'推荐'

3、${prefix}是openresty指定的'安装'目录

Openresty(二十)加载lua文件的一些细节_第1张图片

(1)rpm安装默认的查找路径

Openresty(二十)加载lua文件的一些细节_第2张图片

说明:package.path表明lua文件的'搜索'路径,也是'require'、'dofile(存疑)' 加载文件的路径

Openresty(二十)加载lua文件的一些细节_第3张图片Openresty(二十)加载lua文件的一些细节_第4张图片Openresty(二十)加载lua文件的一些细节_第5张图片

 (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'查找

(4)解决多个项目的路径冲突问题

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

lua_package_cpath

②    相对路径 

(1)openresty|lua的安装目录

(2)哪些指令在prefix寻找目录

openrest中'相关指令':*_by_lua_file

补充:nginx中所有'指令中'指定的'相对'路径都是针对'--prefix'而言

(3)案例讲解 

说明: '业务'代码和配置文件'解耦' -->推荐'*by_lua_file'的形式 

③  深入辨析reuire和dofile

++++++++++ require'和'dofile ++++++++++

共同点: 查找'lua'代码的路径都是package.path,都是'执行'代码

差异点: 

     1)require只会在'第一次'加载文件的时候'执行'里面的代码,后续'不再重复'执行;

     2)dofile每次加载'都会'执行

说明: 强烈推荐使用'require'

二者的区别

其它详细参考

Openresty(二十)加载lua文件的一些细节_第6张图片

Openresty(二十)加载lua文件的一些细节_第7张图片 

④  lua_code_cache

思考: 设置为'off'为什么不生效?

补充:

  1)如果 lua_code_cache 指令是'off'

  2)init_by_lua 处理程序将在'每个请求'上都'运行'一次,因此这种特殊模式下,总是每个请求创建一个'独立'的 Lua VM

Openresty(二十)加载lua文件的一些细节_第8张图片

相关参考 

你可能感兴趣的:(Openresty,openresty,lua,开发语言)