使用 resty cli 时出现错误:找不到“resty.http”模块

我在测试使用 resty cli 的示例代码时遇到了问题。 请查看相关命令的输出:

$ which resty
/usr/local/bin/resty
$ which openresty
/usr/local/bin/openresty
$ resty -e 'ngx.say("hello world")'
hello world

文件:test.lua

local http = require "resty.http"
local httpc = http.new()
local res, err = httpc:request_uri("http://example.com/helloworld", {
  method = "POST",
  body = "a=1&b=2",
  headers = {
    ["Content-Type"] = "application/x-www-form-urlencoded",
  },
  keepalive_timeout = 60000,
  keepalive_pool = 10
})

if not res then
  ngx.say("failed to request: ", err)
  return
end

使用 resty cli 运行此 test.lua 文件时,我遇到了“找不到”resty.http“模块”的问题:

$ resty test.lua
ERROR: test.lua:1: module 'resty.http' not found:
        no field package.preload['resty.http']
        no file '/usr/local/Cellar/openresty/1.19.3.1_1/site/lualib/resty/http.ljbc'
        no file '/usr/local/Cellar/openresty/1.19.3.1_1/site/lualib/resty/http/init.ljbc'
        no file '/usr/local/Cellar/openresty/1.19.3.1_1/lualib/resty/http.ljbc'
        no file '/usr/local/Cellar/openresty/1.19.3.1_1/lualib/resty/http/init.ljbc'
        no file '/usr/local/Cellar/openresty/1.19.3.1_1/site/lualib/resty/http.lua'
        no file '/usr/local/Cellar/openresty/1.19.3.1_1/site/lualib/resty/http/init.lua'
        no file '/usr/local/Cellar/openresty/1.19.3.1_1/lualib/resty/http.lua'
        no file '/usr/local/Cellar/openresty/1.19.3.1_1/lualib/resty/http/init.lua'
        no file './resty/http.lua'
        no file '/usr/local/Cellar/openresty/1.19.3.1_1/luajit/share/luajit-2.1.0-beta3/resty/http.lua'
        no file '/usr/local/share/lua/5.1/resty/http.lua'
        no file '/usr/local/share/lua/5.1/resty/http/init.lua'
        no file '/usr/local/Cellar/openresty/1.19.3.1_1/luajit/share/lua/5.1/resty/http.lua'
        no file '/usr/local/Cellar/openresty/1.19.3.1_1/luajit/share/lua/5.1/resty/http/init.lua'
        no file '/usr/local/Cellar/openresty/1.19.3.1_1/site/lualib/resty/http.so'
        no file '/usr/local/Cellar/openresty/1.19.3.1_1/lualib/resty/http.so'
        no file './resty/http.so'
        no file '/usr/local/lib/lua/5.1/resty/http.so'
        no file '/usr/local/Cellar/openresty/1.19.3.1_1/luajit/lib/lua/5.1/resty/http.so'
        no file '/usr/local/lib/lua/5.1/loadall.so'
        no file '/usr/local/Cellar/openresty/1.19.3.1_1/site/lualib/resty.so'
        no file '/usr/local/Cellar/openresty/1.19.3.1_1/lualib/resty.so'
        no file './resty.so'
        no file '/usr/local/lib/lua/5.1/resty.so'
        no file '/usr/local/Cellar/openresty/1.19.3.1_1/luajit/lib/lua/5.1/resty.so'
        no file '/usr/local/lib/lua/5.1/loadall.so'
stack traceback:
        test.lua:1: in function 'file_gen'
        init_worker_by_lua:45: in function <init_worker_by_lua:43>
        [C]: in function 'xpcall'
        init_worker_by_lua:52: in function <init_worker_by_lua:50>

我尝试过已安装 openresty 的情况下安装 resty.http

点赞
用户7788081
用户7788081

我使用与 在已安装 openresty 上安装 resty.http 所提到的一样的解决方案解决了它。

第一次,由于我的 resty 路径,它不能工作。 但是当我检查错误日志时,我发现它在 /usr/local/Cellar/openresty/1.19.3.1_1/lualib/resty/http.lua 寻找 http.lua。 因此,将 https://github.com/ledgetech/lua-resty-http/blob/master/lib/resty/http.lua 复制过去对我有用。

感谢 Alexander Altshuler原始答案

2020-12-23 11:22:25
用户746559
用户746559

默认情况下,该库已随 Kong 一起安装。不需要复制文件,可以使用 LUA_PATH 环境变量来调整 Lua 路径设置。这可以使用 LuaRocks(Kong 默认包含)来完成。

使用 LuaRocks 设置路径,请尝试:

eval `luarocks path`
2021-01-06 07:17:12