openresty package path

10 篇文章 2 订阅
3 篇文章 0 订阅

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这个变量越来越大,占用的内存越来越多,影响服务器内存指标。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值