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


    一     配置文件中指令加载

    ①  openresty提供  lua_package_path

    1. ++++++++"细节"++++++++
    2. 0、默认
    3. 1)会以'环境变量 LUA_PATH 的值'来初始这个环境变量 -->实际'未生效(不管是通过设置env或者shell
    4. 设置export)'
    5. 2)如果'没有找到'该环境变量,则使用一个'编译时定义的默认路径'来初始化
    6. 1、? 表示'文件名'
    7. 2、;; --> '新加'的路径后面'加上'原来的'默认'路径 -->'推荐'
    8. 3、${prefix}是openresty指定的'安装'目录

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

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

     (2)路径分割符

    1. +++++++++++ "操作系统文件分割符" +++++++++++
    2. package.config:sub(1,1).它返回'路径'分隔符;它'\\'位于Windows和'/'Unix上
    3. 场景: 做'路径'字符串'拼接'
    4. 查找细节:
    5. 1)require 'a.b' --> 会将'.'转换为'路径分割符'
    6. 2)require或dofile的'字符串'就会替换对应的'问号?'
    7. 3)在'package.path'路径中寻找文件

    (3)哪些指令使用

    1. *_by_lua -->在配置文件中'嵌入'lua代码字符串
    2. 细节点: 本质还是通过代码字符串中的'reuire''dofile(存疑)'加载,然后使用'package.path'查找

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

    1. local p = "/home/wzj/work/"
    2. local m_package_path = package.path
    3. package.path = string.format("%s?.lua;%s?/init.lua;%s", p, p, m_package_path)
    4. ++++++++++++ "分割线" ++++++++++++
    5. package.cpath = "../wzj/bin/?.so;"..package.cpath

    lua_package_cpath

    ②    相对路径 

    (1)openresty|lua的安装目录

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

    1. openrest中'相关指令':*_by_lua_file
    2. 补充:nginx中所有'指令中'指定的'相对'路径都是针对'--prefix'而言

    (3)案例讲解 

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

    ③  深入辨析reuire和dofile

    1. ++++++++++ require'和'dofile ++++++++++
    2. 共同点: 查找'lua'代码的路径都是package.path,都是'执行'代码
    3. 差异点:
    4. 1)require只会在'第一次'加载文件的时候'执行'里面的代码,后续'不再重复'执行;
    5. 2)dofile每次加载'都会'执行
    6. 说明: 强烈推荐使用'require'

    二者的区别

    其它详细参考

     

    ④  lua_code_cache

    1. 思考: 设置为'off'为什么不生效?
    2. 补充:
    3. 1)如果 lua_code_cache 指令是'off'
    4. 2)init_by_lua 处理程序将在'每个请求'上都'运行'一次,因此这种特殊模式下,总是每个请求创建一个'独立'的 Lua VM

    相关参考 

  • 相关阅读:
    XSS进阶二
    日志监控系统 loki 配置文件详解
    2022就业季|Spring认证教你,如何使用 Spring 构建 REST 服务(二)
    开学要考IB经济怎么办?
    styleSwin的各种bug
    python多线程技术(Threading)
    神仙级Python入门教程(非常详细),从零基础入门到精通,从看这篇开始
    朝夕光年「红砖」搭建平台架构设计和应用落地
    SLAM从入门到精通(车道线检测)
    threejs 3D标注
  • 原文地址:https://blog.csdn.net/wzj_110/article/details/127758020