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