lua找不到模块插座

Siv*_*mar 5 lua nginx redis

我正在尝试使用 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'
Run Code Online (Sandbox Code Playgroud)

这是什么原因?我该如何解决这个问题?

del*_*ray 6

就我而言,我只需要安装该lua-socket包,因为套接字库没有像其他语言那样内置到默认的 Lua 安装中。


Pig*_*let 1

您收到此错误是因为您的代码执行命令require("socket") 此命令将在多个目录中搜索具有该名称的文件。如果成功,内容将作为 Lua 代码执行。如果不成功,您最终会收到错误消息。

为了解决这个问题,您必须将包含该文件的路径添加到系统变量LUA_PATH中,或者必须package.path在需要该文件之前将其添加到全局表中。Lua将取代?与您为 require() 指定的名称

例如

package.path = package.path .. ";" .. thisPathContainsTheLuaFile .. "?.lua"
Run Code Online (Sandbox Code Playgroud)

请阅读:

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

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