openresty lua_package_path 是整个openresty最基础的功能,不理解

path就无法做项目,更无法写框架。

先看下文档lua_package_path

https://github.com/openresty/lua-nginx-module#lua_package_path

Sets the Lua module search path used by scripts specified by set_by_lua, content_by_lua and others. The path string is in standard Lua path form, and ;; can be used to stand for the original search paths.

设置由set_by_lua,content_by_lua等指定的脚本使用的Lua C模块搜索路径。 cpath字符串采用标准的Lua cpath格式,并且;; 可以用来代表原始的cpath。

相当于PHP的include_path,告诉应用加载程序的时候在哪个目录加载。;; 相当于系统或者框架的路径

lua_package_path的几种用法

设置path将项目框架代码加进lua_package_path

lua_package_path '/data/www/framework/?.lua;;';

表示将 /data/www/framework/ 加进lua的require搜索目录里面。加入我写了一个utils.lua 放到/data/www/framework/里面,使用的时候只需要

local utils = require "utils"

发现每个lua_package_path都是;;结尾的,主要是;;表示原始的path路径,如果没有;; resty 的原生的框架代码就无法 require 进来。

这样的话,问题就来了,如果我服务器上有ABCDEF等很多的项目,那我岂不是得

lua_package_path '/data/www/A/?.lua;/data/www/B/?.lua;/data/www/C/?.lua;/data/www/D/?.lua;;'这样很多个项目。而且不同的项目相同的文件名怎么处理,岂不是乱了。确实会有这个问题。所以说下我们第二个方法

将整个服务目录都加进require搜索目录,使用的时候用项目名称区分

lua_package_path '/?.lua;;‘

A项目的conf配置里面加上项目名称

set $app_root '/data/www/test_test_com/';

使用的时候require app_root . "application.controller.testController"

这样就很容易解决多项目冲突的问题。

package.path 的使用

如果只是想暂时的修改搜索路径,或者研发测试的有时候想用prod的代码有事想用dev的代码。那么可以使用package.path变量

package.path = package.path .. ";/?.lua;/data/test/?.lua;;"

看到有的框架也这么使用。临时这么使用没问题。如果生产的也都这么使用有问题的,试想下每个请求都做一次该操作,会导致package.path这个变量越来越大,占用的内存越来越多,影响服务器内存指标。

最新文章

  1. 《3D Math Primer for Graphics and Game Development》读书笔记1
  2. iOS 系统分析(一) 阅读内核准备知识
  3. MVC 移除复数表名的契约
  4. 创建空列表遇到的问题-RF
  5. 面试求职中需要了解的Java多线程知识
  6. HBase 专题技术收录
  7. UML 用例图,时序图,活动图的定义以及区别
  8. msql 按值排序
  9. linux环境下jdk 安装以及maven私服搭建
  10. 深入浅出Node.js (4) - 异步编程
  11. JVM -- CMS
  12. Android:ViewPager04
  13. html中加入超链接方式的汇总
  14. Java获取.properties配置文件某一项value根据key值
  15. SpringMVC 的重定向时,参数非法问题
  16. date 命令详解
  17. Maven打包排除某个资源或者目录
  18. Django----模板层
  19. Java多线程常用面试题(含答案,精心总结整理)
  20. Confluence 6 服务器的许可证信息

热门文章

  1. 为什么阿里Java开发手册不推荐使用Timestamp
  2. Debian+Wine For Termux,兼容Windows on arm的安卓手机子系统!
  3. JuiceFS 元数据引擎选型指南
  4. C++和Java多维数组声明和初始化时的区别与常见问题
  5. Charles的安装与使用
  6. 【算法】基础DP
  7. Vue3 SFC 和 TSX 方式调用子组件中的函数
  8. 基本的Dos命令 在控制台如何进入某一个文件或者进入不同的盘符
  9. 一篇文章带你了解轻量级Web服务器——Nginx简单入门
  10. fltp备份文件后统计验证