我有一个用于 Kong 的自定义插件,它在 Kong v0.14.1 上运行良好,但是在我升级到 v.1.0.2 后,它抛出了一个错误。
使用的操作系统:macOS Mojave
在kong.conf文件中,我有以下代码:
log_level = debug
plugins=my-custom-plugin
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下命令启动 Kong:
kong start -c kong.conf
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
错误:/usr/local/share/lua/5.1/kong/cmd/start.lua:50: nginx: [error] 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
Run Code Online (Sandbox Code Playgroud)
这给出了以下输出:
my-custom-plugin 1.0-1 is now installed in /usr/local/opt/kong (license: MIT)
Run Code Online (Sandbox Code Playgroud)
不知何故,Kong 似乎无法找到我安装的自定义插件。知道为什么会这样吗?
@user5377037 的回答包含大部分相关细节,我只想提一下,从 Kong 0.14.x 开始,“custom_plugins”现在只是“plugins”。
进行此更改的原因之一是您现在可以使用这个新变量名称来选择加载或不加载与 Kong 捆绑的插件——对某些人来说这是一个有用的功能。但是,如果要加载自定义插件和捆绑插件,则现在必须指定bundled关键字以指示要保持加载捆绑插件。
实际效果是在 Kong < 0.14.x 中:
custom_plugins = plugin1,plugin2
Run Code Online (Sandbox Code Playgroud)
或者
KONG_CUSTOM_PLUGINS=<plugin-name>
Run Code Online (Sandbox Code Playgroud)
在 Kong >= 0.14.x 中,你现在写:
plugins = bundled,plugin1,plugin2
Run Code Online (Sandbox Code Playgroud)
或者
KONG_PLUGINS=bundled,<plugin-name>
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
这意味着您已将代理设置为使用某个插件,但现在您没有在启动时加载该插件,因此 Kong 不知道该做什么并退出。本质上,您只会加载一个可能不是您想要的自定义插件。
关于lua_package_path并KONG_LUA_PACKAGE_PATH保持与 user5377037 帖子中的注释相同。
看起来找不到handler.lua所需的文件。$ tree .您可以在插件项目的根目录下运行吗?
这是我不久前执行的测试插件的相同命令的结果(https://github.com/jerneyio/kong-plugin-header-echo)
\n\n$ tree .\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 kong\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 plugins\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 kong-plugin-header-echo\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 handler.lua\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 schema.lua\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 kong-plugin-header-echo-0.1.0-1.all.rock\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 kong-plugin-header-echo-0.1.0-1.rockspec\nRun Code Online (Sandbox Code Playgroud)\n\n另外,你确定你的 handler.lua 暴露在你的 rockspec 中吗?再次,这里是成功的例子:
\n\n$ cat kong-plugin-header-echo-0.1.0-1.rockspec \npackage = "kong-plugin-header-echo"\nversion = "0.1.0-1"\nsource = {\n url = "git//github.com/jerneyio/kong-plugin-header-echo.git"\n}\ndescription = {\n homepage = "https://github.com/jerneyio/kong-plugin-header-echo",\n license = "MIT"\n}\ndependencies = {\n "lua >= 5.3",\n "kong >= 0.14"\n}\nbuild = {\n type = "builtin",\n modules = {\n ["kong.plugins.kong-plugin-header-echo.handler"] = "kong/plugins/kong-plugin-header-echo/handler.lua",\n ["kong.plugins.kong-plugin-header-echo.schema"] = "kong/plugins/kong-plugin-header-echo/schema.lua"\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n