我正在尝试使用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'
这是什么原因以及如何解决这个问题?
答案 0 :(得分:0)
您收到此错误,因为您的代码执行命令require("socket")
此命令将在多个目录中搜索具有该名称的文件。如果成功,内容将作为Lua代码执行。如果不成功,您最终会收到错误消息。
为了解决这个问题,您必须将包含该文件的路径添加到系统变量 LUA_PATH ,或者您必须将其添加到全局表package.path
中,因为您需要该文件。
Lua将取代?用你给require()
例如
package.path = package.path .. ";" .. thisPathContainsTheLuaFile .. "?.lua"
请阅读:
答案 1 :(得分:0)
在我的情况下,我只需要安装lua-socket
软件包,因为套接字库没有像其他语言一样内置在默认的Lua安装中。