Module socket not found lua

我正在尝试使用 lua 访问 nginx 中的 redis 值。当我在命令行上执行 lua 文件时,一切都很顺利,我能够读写 redis 的值。但是当我试图通过访问写有 access_by_lua 指令的位置从 nginx 执行相同的文件时,错误日志文件中记录了以下错误

no field package.preload['socket']
no file '/home/sivag/redis/redis-lua/src/socket.lua'
no file 'src/socket.lua'
no file '/home/sivag/lua/socket.lua'
no file '/opt/openresty/lualib/socket.so'
no file './socket.so'
no file '/usr/local/lib/lua/5.1/socket.so'
no file '/opt/openresty/luajit/lib/lua/5.1/socket.so'
no file '/usr/local/lib/lua/5.1/loadall.so'

这是什么原因,我该如何解决?

点赞
用户2858170
用户2858170

你得到该错误,是因为你的代码执行了命令 require("socket")。该命令将在多个目录中搜索文件名为该名称的文件。如果成功,其内容将被作为 Lua 代码执行。如果不成功,则会出现错误消息。

为了修复此问题,您需要将包含该文件的路径添加到系统变量LUA_PATH中,或在需要文件之前将其添加到全局表 package.path 中。Lua 将用您提供给 require() 的名称替换 ?。

例如:

package.path = package.path .. ";" .. 这个包含 Lua 文件的路径 .. "?.lua"

请阅读:

http://www.lua.org/manual/5.3/manual.html#pdf-require

https://www.lua.org/pil/8.1.html

2016-05-02 09:24:59
用户526601
用户526601

在我的情况下,我只需要安装 lua-socket 包,因为套接字库没有像其他一些语言一样内置在默认的 Lua 安装中。

2020-06-17 10:52:10