没有找到模块套接字lua

时间:2016-05-02 06:03:18

标签: nginx lua 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'

这是什么原因以及如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

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

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

的名字

例如

package.path = package.path .. ";" .. thisPathContainsTheLuaFile .. "?.lua"

请阅读:

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

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

答案 1 :(得分:0)

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