我正在尝试使用 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)
这是什么原因?我该如何解决这个问题?
您收到此错误是因为您的代码执行命令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
归档时间: |
|
查看次数: |
10962 次 |
最近记录: |