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

openresty package path的更多相关文章

  1. openresty package.path require 报错

    在文件中 package.path = '/usr/local/share/lua/5.1/?.lua;/usr/local/openresty/lualib/resty/?.lua;' packag ...

  2. lua package path 设置方法

    lua package path 设置方法: 添加环境变量LUA_PATH="/add_path/?.lua;;" 1.add_path为新添加的目录: 2.一定要添加双引号: 3 ...

  3. lua package.path的使用

    需要用lua写一个工具,c++调用lua,然后这个lua要require其他lua脚本,在主lua里面设置package.path,但一直都失败,甚至lua都无法编译通过. project_path ...

  4. golang程序编译时提示“package runtime: unrecognized import path "runtime" (import path does not begin with hostname)”

    在编译golang的工程时提示错误的, 提示的错误信息如下: package bytes: unrecognized import path "bytes" (import pat ...

  5. Nginx插件之openresty反向代理和日志滚动配置案例

    Nginx插件之openresty反向代理和日志滚动配置案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.openresty介绍 1>.Nginx介绍 Nginx是一款 ...

  6. Docker swarm结合Openresty部署rabbitmq集群

    Docker swarm结合Openresty部署rabbitmq集群 大家好,年底了,年味儿越来越浓了.2019年的寒冬被定义为未来10年中最好的一年,对于这一说法悲观的人和乐观的人的理解是不一样的 ...

  7. 由OpenResty粘合的企业Web架构

    前言:    2012年2月章亦春(agentzh)在Tech-Club的一次线下聚会上以<由Lua 粘合的Nginx生态环境>为主题做了演讲,分析了企业Web架构的趋势,即一个看起来完整 ...

  8. openresty的lua_package_path

    文档 lua_package_path可以配置openresty的文件寻址路径.官网文档如下: # 设置纯 Lua 扩展库的搜寻路径(';;' 是默认路径): lua_package_path '/f ...

  9. OpenResty.spec

    Name: openresty Version: 1.13.6.1 Release: 2%{?dist} Summary: OpenResty, scalable web platform by ex ...

  10. 用openresty(Lua)写一个获取YouTube直播状态的接口

    文章原发布于:https://www.chenxublog.com/2019/08/29/openresty-get-youtube-live-api.html 之前在QQ机器人上面加了个虚拟主播开播 ...

随机推荐

  1. Ubuntu20.04和Docker环境下安装Redash中文版

    创建Ubunt20.04虚拟机,请参考:https://www.linuxidc.com/Linux/2020-03/162547.htm 一.安装基础环境: # 1.更换APT国内源 sudo se ...

  2. java基础-冒泡排序以及稀疏数组

    java基础 以下内容为本人的学习笔记,如需要转载,请声明原文链接   https://www.cnblogs.com/lyh1024/p/16720908.html Ø 冒泡排序原理: 比较数组中, ...

  3. 洛谷P1036 [NOIP2002 普及组] 选数 (搜索)

    n个数中选取k个数,判断这k个数的和是否为质数. 在dfs函数中的状态有:选了几个数,选的数的和,上一个选的数的位置: 试除法判断素数即可: 1 #include<bits/stdc++.h&g ...

  4. Spring Boot 源码学习之转载

    这次的学习,主要转载了 波波老师的笔记,后续会自己整理一份 1.Spring-Boot源码分析-源码编译:https://dpb-bobokaoya-sm.blog.csdn.net/article/ ...

  5. 基于QT和C++实现的翻金币游戏

    基于QT和C++的翻金币游戏 声明: QT翻金币项目可以说是每个新学QT的同学都会去写的一个项目,网上的源码也很多,我也是最近刚开始学QT,所以也参考了很多前辈的代码自己重新敲了一遍代码. 游戏介绍: ...

  6. java中list集合怎么判断是否为空

    首先看下面代码 @RequestMapping("/getCatlist") public String getCatlist(HttpSession session,HttpSe ...

  7. golang开发一个简单的grpc

    0.1.索引 https://waterflow.link/articles/1665674508275 1.什么是grpc 在 gRPC 中,客户端应用程序可以直接调用不同机器上的服务器应用程序上的 ...

  8. 文本挖掘与NLP笔记——代码向:分词

    分词:jieba.cut words = jieba.cut("我来到北京大学",cut_all=True) print('全模式:'+'/'.join([w for w in w ...

  9. 【k8s】k8s pv、pvc无法删除问题。

    一般删除步骤为:先删除pod再删除pvc最后删除pv 遇到的问题 但是遇到pv使用处于"Terminating"状态,而且删不掉.如下图: 解决办法 直接删除k8s中的记录: ku ...

  10. ML-朴素贝叶斯算法

    贝叶斯定理 w是由待测数据的所有属性组成的向量.p(c|x)表示,在数据为x时,属于c类的概率. \[p(c|w)=\frac{p(w|c)p(c)}{p(w)} \] 如果数据的目标变量最后有两个结 ...