我有一个针对Kong的自定义插件,该插件在Kong v0.14.1上运行良好,但是在升级到v.1.0.2之后,它抛出了错误。
使用的操作系统:macOS Mojave
在 kong.conf 文件中,我有以下代码:
log_level = debug
plugins=my-custom-plugin
我尝试使用以下命令启动Kong:
kong start -c kong.conf
我得到这个错误:
错误:/usr/local/share/lua/5.1/kong/cmd/start.lua:50:nginx:[错误] init_by_lua
错误:/usr/local/share/lua/5.1/kong/init.lua:344:my-custom-plugin插件已启用但未安装;
找不到模块'kong.plugins.my-custom-plugin.handler':未找到kong.plugins.my-custom-plugin.handler的LuaRocks模块
没有字段package.preload ['kong.plugins.my-custom-plugin.handler']
没有文件'./kong/plugins/kong-my-custom-plugin/handler.lua'...
我使用以下命令安装了插件:
luarocks make
给出了以下输出:
my-custom-plugin 1.0-1 is now installed in /usr/local/opt/kong (license: MIT)
以某种方式,似乎Kong找不到我安装的自定义插件。知道为什么会这样吗?
答案 0 :(得分:4)
@ user5377037的答案包含大部分相关细节,我只想提及从Kong 0.14.x开始,“ custom_plugins”现在只是“ plugins”。
进行此更改的原因之一是,您现在可以使用此新变量名来选择加载或不加载与Kong捆绑在一起的插件-这对某些用户而言是有用的功能。但是,如果要加载自定义插件和捆绑的插件,则现在必须指定bundled
关键字,以指示要保持捆绑的插件。
实际效果是在Kong <0.14.x:
custom_plugins = plugin1,plugin2
或
KONG_CUSTOM_PLUGINS=<plugin-name>
在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
和KONG_LUA_PACKAGE_PATH
的注释与user5377037的帖子中的注释相同。
答案 1 :(得分:2)
您现在必须将自定义插件的名称添加到Kong配置(在每个Kong节点上)的custom_plugins列表中:
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>
here是解决方法,可用于在 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
只需复制此路径并将其添加到lua_package_path
lua_package_path = /您的插件路径/lua_modules/share/lua/5.1/kong/plugins/您的插件名称/ ?. lua
只需启动kong:kong start --vv
答案 2 :(得分:0)
似乎找不到必需的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"
}
}