Lua脚本本地调试

这篇具有很好参考价值的文章主要介绍了Lua脚本本地调试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这里主要使用日志的方式进行debug

环境依赖

项目对openresty包的依赖比较高,所以环境基础都在openresty下进行

openresty的使用

openresty下载地址

下载完成后解压,具体使用方式和nginx没有什么区别,主要依赖文件是一下几个

nginx.exe # 负责启动服务
conf/nginx.conf  # nginx的配置文件 使用lua脚本主要也是在这里配置
logs  # 日志查看 排错

lua链接mysql校验用户

这里拿lua链接mysql为例

 -- utils_mysql
 local mysql = require "resty.mysql"
local cjson = require "cjson"
local _M = {}

local function getUser(userNo, orgCode)
    db = _M:new()
    if not db then
        return false, {}

    end
    local userRes, err, errcode, sqlstate = db:query(
        "SELECT COUNT(F_user_account) F_count FROM t_user WHERE F_user_account = " .. userNo .. " AND F_deleted='0'")
    -- 目前用户不存在放行  只存入相关信息 设置匿名用户
    if not userRes then
        ngx.log(ngx.ERR, "用户--" .. userNo .. "-- 不存在" .. err)
        return false, {
            status = 401,
            message = "Bad token; " .. tostring(err)
        }
    end
    local orgUserRes, err, errcode, sqlstate = db:query(
        "SELECT COUNT(F_user_account) F_count, F_status FROM t_org_user WHERE F_user_account = " .. userNo .. " AND F_org_code = " ..
            orgCode .. " AND F_deleted='0'")
    if not orgUserRes then
        ngx.log(ngx.ERR, "用户--" .. userNo .. "--和--" .. orgCode .. "--组织关系不存在"..err)
        return false, {
            status = 4060,
            message = "用户需要登录"
        }
    end


    ngx.log(ngx.ERR, "orgUserRes Is" .. cjson.encode(orgUserRes))

    -- lua脚本似乎不遵循index=0的原则 [{"F_count":"1","F_status":"0"}]
    if orgUserRes[1]["F_status"] ~= '0' then
        ngx.log(ngx.ERR, "该组织下角色已被禁用,请联系管理员".. err)
        return false, {
            status = 7025,
            message = "该组织下角色已被禁用,请联系管理员"
        }
    end
    ngx.log(ngx.WARN, "UserRes Is "..cjson.encode(userRes).. "orgUserRes Is" .. cjson.encode(orgUserRes))
    -- 校验成功的返回信息
    ngx.say('CheckUser Success')
    return true, {}
end

function _M.new(self)
    local db, err = mysql:new()
    if not db then
        ngx.log(ngx.ERR, "failed to instantiate mysql: ", err)
        return nil
    end
    -- 1 sec
    db:set_timeout(1000)
    local ok, err, errcode, sqlstate = db:connect{
        host = "xxxx",
        port = "xxxx",
        database = "xxxx",
        user = "xxxx",
        password = "xxxx"
    }
    if not ok then
        ngx.log(ngx.ERR, "failed to connect:  ", err, errcode, sqlstate)
        return nil
    end
    return db
end

function _M.close(self)
    local sock = self.sock
    if not sock then
        return nil, "not initialized"
    end
    if self.subscribed then
        return nil, "subscribed state"
    end
    -- put it into the connection pool of size 100,
    -- with 10 seconds max idle timeout
    local ok, err = self.sock:set_keepalive(10000, 100)
    if not ok then
        ngx.log(ngx.ERR, "failed to set keepalive:", err)
        return
    end
end

getUser('username', 'org_code')
-- return _M

修改配置文件nginx.conf


#user  nobody;
worker_processes 1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;
events {
    worker_connections 1024;
}


http {
    include mime.types;
    default_type application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;
    sendfile on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout 65;

    #gzip  on;

    server {
        # 修改原本的80端口为8765
        listen 8765;
        server_name localhost;

        #charset koi8-r;

        # 添加的lua脚本校验路径
        location /testlua {
            default_type 'text/html';  # 默认文本方式返回
            charset utf-8;
            lua_code_cache off;  # 不使用缓存
            content_by_lua_file  luaScript/utils_mysql.lua;  # 需要执行的lua脚本文件路径,这里的路径是相对于压缩包的路径,也可以使用绝对路径 注意windows下 \ 需要变成 /
        }

        #access_log  logs/host.access.log  main;
        location / {
            root html;
            index index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;

        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;
    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}


启动openresty

双击 nginx.exe即可,浏览器输入http://localhost:8765进入启动页面

调试过程中,每次点击nginx.exe都会启动新的线程,导致有时候更新的项目但是打到的请求还是在老的配置服务上,为确保每次请求都是最新的,最好把线程都删掉

windows
# 展示线程
tasklist /fi "imagename eq nginx.exe"
# 杀掉线程
taskkill /fi "imagename eq nginx.exe" -f

Lua脚本本地调试,Gateway,lua,junit,android,gateway

Lua脚本校验

浏览器输入http://localhost:8765/testlua进入插件校验页面

运行的日志和错误信息都可以在logs/access.log&error.log中找到,由于这里已经是处理完成的脚本信息,如何解决问题这里不做展示。

需要注意的是,在脚本文件中ngx.log(ngx.ERR, "xxxx")最好都设置成err级别,别的级别好像不会展示在日志中

Lua脚本本地调试,Gateway,lua,junit,android,gateway

校验

Error

Lua脚本本地调试,Gateway,lua,junit,android,gateway

Success

日志和错误信息都可以在logs/access.log&error.log中找到,由于这里已经是处理完成的脚本信息,如何解决问题这里不做展示。

需要注意的是,在脚本文件中ngx.log(ngx.ERR, "xxxx")最好都设置成err级别,别的级别好像不会展示在日志中

[外链图片转存中…(img-PpfLXDLJ-1689328661208)]

校验

Error

[外链图片转存中…(img-j6J54ZsA-1689328661209)]

Success

Lua脚本本地调试,Gateway,lua,junit,android,gateway文章来源地址https://www.toymoban.com/news/detail-596869.html

到了这里,关于Lua脚本本地调试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • lua脚本获取table类型-Java使用lua脚本操作redis获取zset元素的集合

    lua脚本获取table类型-Java使用lua脚本操作redis获取zset元素的集合 7.0点赞功能-定时持久化到数据库-lua脚本的编写_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1bu411j75u 这个脚本主要是放到Springboot工程里的, 这里如果是向放到字段控制台执行,那就要加入 eval 以及其他参数:

    2024年02月13日
    浏览(50)
  • 无涯教程-Lua - 调试语句

    Lua提供了一个调试库,该库提供了所有原始函数供无涯教程创建自己的调试器。即使没有内置的Lua调试器,也有许多针对Lua的调试器,这些调试器由各种开发人员创建,其中许多开源。 下表列出了Lua调试库中可用的函数及其用法。 Sr.No. Method Purpose 1 debug() 进入交互式模式进行

    2024年02月14日
    浏览(38)
  • 【实战】使用Lua脚本怎么清理redis中的数据【实战】使用Lua脚本怎么清理redis中的数据

    首先我们通过hiredis 向redis 中写入了数据,这里我们主要以测试为目的,所以,Key 值设定为毫秒级时间戳。 但是当我们测试完成之后,需要验证实际情况,这里我们直接使用redis-cli 登录数据库看看。 本次测试完成,接下来要结合业务开始测试,需要清理数据库,但是一条一

    2024年02月13日
    浏览(91)
  • 一文学会lua脚本

    Lua是一门简洁、高效的脚本语言,用于嵌入应用程序和扩展。我整理了一篇学习入门指南。希望对大家有所帮助。 Lua是一种小巧而强大的脚本语言,最初由巴西里约热内卢天主教大学的研究小组于1993年开发而成。Lua的设计目标是为应用程序提供灵活的扩展和定制功能。它由

    2024年02月11日
    浏览(42)
  • Lua脚本语言

    Lua(发音为\\\"loo-ah\\\",葡萄牙语中的\\\"lua\\\"意为月亮)是一种轻量级的、高效的、可嵌入的脚本编程语言。官网Lua最初由巴西计算机科学家Roberto Ierusalimschy、Waldemar Celes和Luiz Henrique de Figueiredo于1993年开发,它的设计目标是提供一种简单的、易扩展的脚本语言,特别适用于嵌入到其他

    2024年02月07日
    浏览(39)
  • Redis入门 - Lua脚本

    原文首更地址,阅读效果更佳! Redis入门 - Lua脚本 | CoderMast编程桅杆 https://www.codermast.com/database/redis/redis-scription.html Redis 脚本使用 Lua 解释器来执行脚本。 Redis 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL。 Eval 命令的基本语法如下: EVAL script numkeys key [key ...]

    2024年02月09日
    浏览(42)
  • Lua脚本编程基础

    一. 数据类型 ①基本类型 1. nil类型 2. boolean类型 3. numbers类型 4. string类型 ②高级类型 1. table类型 2. function类型 3. userdata类型 4. thread类型  二 . 脚本示例 三. lua与c/c++的互操作

    2024年02月12日
    浏览(34)
  • Redis之Lua脚本

    目录 Lua脚本 编写Lua脚本  springboot整合redis使用lua Lua脚本        Redis在2.6推出了脚本功能,允许开发者使用Lua语言编写脚本传到Redis中执行。使用脚本的好处如下: 1. 减少网络开销:本来5次网络请求的操作,可以用一个请求完成,原先5次请求的逻辑放在redis服务器上完成。使

    2024年01月23日
    浏览(38)
  • ardupilot开发 --- Lua脚本篇

    ArduPilot引入了对Lua脚本的支持; 可以同时运行多个脚本; Lua脚本存放在 SD card 中; Copter-4.0 及以上版本才支持Lua脚本; scripting API ?scripting applets ? 飞控条件:2 MB of flash and 70 kB of memory ; 将Lua脚本上传到 SD card’s APM/scripts 文件夹中,在Mission Planner使用MAVFTP可以上传文件;

    2024年02月11日
    浏览(39)
  • 使用lua脚本操作redis

    redis中实现事务有两种方法: 1.WATCH监视键的变动,然后MULTI开始事务,EXEC提交事务 WATCH key [key…]:监视一个或多个键,如果在事务执行之前被修改,则事务被打断。 MULTI:标记一个事务的开始。 EXEC:执行事务中的所有命令。 DISCARD:取消一个事务,放弃执行事务中的所有命

    2024年02月16日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包