Kong v1.0.2 的自定义插件已启用但未安装
我有一个针对 Kong 的自定义插件,对于 Kong v0.14.1 可以正常工作,但是在我升级到 v1.0.2 之后出现了错误。
使用的操作系统是:macOS Mojave
在 kong.conf 文件中,我有这段代码:
log_level = debug
plugins=my-custom-plugin
我尝试使用以下命令启动 Kong:
kong start -c kong.conf
然后我得到了以下错误:
Error: /usr/local/share/lua/5.1/kong/cmd/start.lua:50: nginx: [error] init_by_lua
error: /usr/local/share/lua/5.1/kong/init.lua:344: my-custom-plugin plugin is enabled but not installed;
module 'kong.plugins.my-custom-plugin.handler' not found:No LuaRocks module found for kong.plugins.my-custom-plugin.handler
no field package.preload['kong.plugins.my-custom-plugin.handler']
no file './kong/plugins/kong-my-custom-plugin/handler.lua'...
我使用以下命令安装了该插件:
luarocks make
然后我得到了以下输出:
my-custom-plugin 1.0-1 已安装在 /usr/local/opt/kong (许可协议:MIT)
不知何故,Kong 似乎无法找到我安装的自定义插件。有任何想法吗?
加载插件
您现在必须将自定义插件的名称添加到 Kong 配置中的 custom_plugins 列表中(在每个 Kong 节点上):
custom_plugins = <plugin-name>
如果您使用了两个或更多自定义插件,请在它们之间插入逗号,如下所示:
custom_plugins = plugin1,plugin2
注意: 您也可以通过其环境变量等效设置此属性:KONG_CUSTOM_PLUGINS 或在配置属性中定义自定义插件,如下所示:
KONG_CUSTOM_PLUGINS=<plugin-name> kong start
提醒: 不要忘记为 Kong 集群中的每个节点更新 custom_plugins 指令。
验证加载插件
您现在应该能够无问题地启动 Kong。请查看自定义插件的说明,了解如何在 API 或 Consumer 对象上启用/配置插件。
为确保 Kong 正在加载您的插件,请使用调试日志级别启动 Kong:
log_level = debug
或者:
KONG_LOG_LEVEL=debug
然后,您应该会看到如下所示的日志,这是加载每个插件时的日志:
[debug] Loading plugin <plugin-name>
此处是向 custom_plugins 和 lua_package_path 中添加东西的解决步骤。
在
custom_plugins = <plugin-name>中添加自定义插件名称。使用以下步骤安装 hello-world 插件:
如果您有插件的源代码,则进入其中并执行以下命令:
luarocks make,它将安装您的插件。一旦您执行此命令
make install-dev。它将在类似于以下路径的位置创建 lua 文件:/your-plugin-path/**lua_modules/share/lua/5.1/kong/plugins/your-plugin-name/**?.lua
只需复制此路径并将其添加到 kong 配置文件中的
lua_package_path中lua_package_path=/your-plugin-path/lua_modules/share/lua/5.1/kong/plugins/your-plugin-name/?.lua
只需启动 kong:
kong start --vv
@user5377037的答案已经包含了大部分相关的细节,我只想提一下自Kong 0.14.x起,“custom_plugins”现在只是“plugins”。
这个变化的原因之一是你现在可以使用这个新的变量名来选择是否加载Kong捆绑的插件,这对于一些人是一个有用的功能。然而,如果你想同时加载自定义插件和捆绑插件,现在你必须指定“bundled”关键词以表示你想要保持捆绑插件的加载。
0.14.x以前
在Kong <0.14.x中,其实际效果是:
custom_plugins = plugin1,plugin2
或
KONG_CUSTOM_PLUGINS=<plugin-name>
0.14.x以后
在Kong> = 0.14.x中,你现在需要写:
plugins = bundled,plugin1,plugin2
或
KONG_PLUGINS=bundled,<plugin-name>
如果你不使用“bundled”
如果你不添加“bundled”关键词,你可能会遇到以下错误:
nginx: [error] init_by_lua error: /usr/local/share/lua/5.1/kong/init.lua:292: key-auth plugin is in use but not enabled
stack traceback:
[C]: in function 'assert'
/usr/local/share/lua/5.1/kong/init.lua:292: in function 'init'
init_by_lua:3: in main chunk
这意味着你已经设置了代理使用某个插件,但现在你没有在启动时加载该插件,因此Kong不知道该怎么做而退出。实际上,你只会加载一个自定义插件,这可能不是你想要的。
lua_package_path
关于“lua_package_path”和“KONG_LUA_PACKAGE_PATH”的注释与user5377037的帖子相同。
参考
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?


似乎找不到所需的
handler.lua文件。你能在插件项目的根目录下运行$ tree .吗?以下是我以前做的一个测试插件的相同命令的结果(https://github.com/jerneyio/kong-plugin-header-echo):
$ tree . . ├── README.md ├── kong │ └── plugins │ └── kong-plugin-header-echo │ ├── handler.lua │ └── schema.lua ├── kong-plugin-header-echo-0.1.0-1.all.rock └── kong-plugin-header-echo-0.1.0-1.rockspec此外,您确定您的
handler.lua在您的 rockspec 中已公开吗?这里还有一个成功的示例:$ cat kong-plugin-header-echo-0.1.0-1.rockspec package = "kong-plugin-header-echo" version = "0.1.0-1" source = { url = "git//github.com/jerneyio/kong-plugin-header-echo.git" } description = { homepage = "https://github.com/jerneyio/kong-plugin-header-echo", license = "MIT" } dependencies = { "lua >= 5.3", "kong >= 0.14" } build = { type = "builtin", modules = { ["kong.plugins.kong-plugin-header-echo.handler"] = "kong/plugins/kong-plugin-header-echo/handler.lua", ["kong.plugins.kong-plugin-header-echo.schema"] = "kong/plugins/kong-plugin-header-echo/schema.lua" } }