如何在lua中的openresty的nginx.conf文件中初始化mysql
2021-5-19 16:12:5
收藏:0
阅读:227
评论:1
我正在使用redis和mysql进行openresty项目,其中我正在尝试使用init_worker_by_lua初始化数据库,但是我收到以下错误:
我的db.lua代码:
local mysql = require("resty.mysql") -- 引入mysql
local redis = require("resty.redis") -- 引入redis
local db, err = mysql:new()
if not db then
ngx.say("无法实例化mysql:", err)
return
end
local ok,err,errcode,sqlstate = db:connect{
host ="127.0.0.1",
port = 3306,
database = "employee",
user ="root",
password ="password"
charset ="utf8",
max_packet_size = 1024 * 1024,
}
以下是nginx.conf文件:
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
init_worker_by_lua_file /Users/rahulgarg/work/conf/db.lua;
server {
listen 8082;
location ~ ^/api(.*)$ {
default_type 'text/html';
add_header 'Content-Type' 'application/json';
access_by_lua_file /Users/rahulgarg/work/conf/auth.lua;
content_by_lua_file /Users/rahulgarg/work/conf/dbapi.lua;
}
}
}
在运行openresty -ppwd/-c conf/nginx.conf时收到的错误:
[error] 72436#1634105:
init_worker_by_lua_file error:
.../Cellar/openresty/1.19.3.1_1/lualib/resty/mysql.lua:1094:
API disabled in the context of init_worker_by_lua* stack traceback:
[C]:
in function 'tcp'
.../Cellar/openresty/1.19.3.1_1/lualib/resty/mysql.lua:1094:
in function 'new'
/Users/rahulgarg/work/conf/db.lua:4: in main chunk
有什么解决方法可以解决这个问题。谢谢
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

经过调试,我已经找到了答案,以防其他人卡在同一点上。我创建了一个db.lua模块,并进行了以下更改。
local mysql = require "resty.mysql" local _M={} function _M.connect() db, err = mysql:new() if not db then ngx.say("failed to instantiate mysql: ", err) return end db:set_timeout(1000) -- 1 sec local ok, err, errcode, sqlstate = db:connect{ host = "127.0.0.1", port = 3306, database = "employee", user = "root", password = "password", charset = "utf8", max_packet_size = 1024 * 1024, } if not ok then ngx.say("failed to connect: ", err, ": ", errcode, " ", sqlstate) return end ngx.say("connected to mysql.") return db end return _M我同样为redis做了相同的设置,并为redis创建了一个单独的模块。然后将两个模块都添加到nginx.conf的init_worker_by_lua块中,它可以工作。如果您有任何问题,请告诉我。