Skip to content

help request: custom plugin failed to load plugin [demo] err: module 'apisix.plugins.demo' not found: #11835

Description

@bmbper

Description

  1. config file: config.yaml
deployment:
  role: traditional
  role_traditional:
    config_provider: etcd
  admin:
    admin_key:
      - name: admin
        key: edd1c9f034335f136f87ad84b625c8f1  # using fixed API token has security risk, please update it when you deploy to production environment
        role: admin
apisix:
  extra_lua_path: /usr/local/apisix/custom/?.lua
  log_level: debug
plugins:
  - demo
  1. plugin file /usr/local/apisix/custom/apisix/plugins/demo.lua
--
-- Licensed to the Apache Software Foundation (ASF) under one or more
-- contributor license agreements.  See the NOTICE file distributed with
-- this work for additional information regarding copyright ownership.
-- The ASF licenses this file to You under the Apache License, Version 2.0
-- (the "License"); you may not use this file except in compliance with
-- the License.  You may obtain a copy of the License at
--
--     http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
local core     = require("apisix.core")
local consumer_mod = require("apisix.consumer")
local plugin_name = "demo"


local schema = {
    type = "object",
    properties = {
        header = {
            type = "string",
            default = "apikey",
        },
        query = {
            type = "string",
            default = "apikey",
        },
        hide_credentials = {
            type = "boolean",
            default = false,
        }
    },
}

local consumer_schema = {
    type = "object",
    properties = {
        key = { type = "string" },
    },
    encrypt_fields = {"key"},
    required = {"key"},
}


local _M = {
    version = 0.1,
    priority = 2500,
    type = 'auth',
    name = plugin_name,
    schema = schema,
    consumer_schema = consumer_schema,
}


function _M.check_schema(conf, schema_type)
    if schema_type == core.schema.TYPE_CONSUMER then
        return core.schema.check(consumer_schema, conf)
    else
        return core.schema.check(schema, conf)
    end
end


function _M.rewrite(conf, ctx)
    local from_header = true
    local key = core.request.header(ctx, conf.header)

    if not key then
        local uri_args = core.request.get_uri_args(ctx) or {}
        key = uri_args[conf.query]
        from_header = false
    end

    if not key then
        return 401, {message = "Missing API key found in request"}
    end

    local consumer_conf = consumer_mod.plugin(plugin_name)
    if not consumer_conf then
        return 401, {message = "Missing related consumer"}
    end

    local consumers = consumer_mod.consumers_kv(plugin_name, consumer_conf, "key")
    local consumer = consumers[key]
    if not consumer then
        return 401, {message = "Invalid API key in request"}
    end
    core.log.info("consumer: ", core.json.delay_encode(consumer))

    if conf.hide_credentials then
        if from_header then
            core.request.set_header(ctx, conf.header, nil)
        else
            local args = core.request.get_uri_args(ctx)
            args[conf.query] = nil
            core.request.set_uri_args(ctx, args)
        end
    end

    consumer_mod.attach_consumer(ctx, consumer, consumer_conf)
    core.log.info("hit key-auth rewrite")
end


return _M

  1. when i run apisix start, i got an error in error.log
2024/12/16 17:05:52 [error] 152181#152181: *22207 [lua] plugin.lua:138: load_plugin(): failed to load plugin [demo] err: module 'apisix.plugins.demo' not found:
	no field package.preload['apisix.plugins.demo']
	no file '/usr/local/apisix/custom/\apisix/plugins/demo.lua'
	no file '/usr/local/apisix//deps/share/lua/5.1/apisix/plugins/demo.lua'
	no file '/usr/local/apisix//deps/share/lua/5.1/apisix/plugins/demo/init.lua'
	no file '/usr/local/apisix/apisix/plugins/demo.lua'
	no file '/usr/local/apisix/apisix/plugins/demo/init.lua'
	no file '/usr/local/openresty/site/lualib/apisix/plugins/demo.ljbc'
	no file '/usr/local/openresty/site/lualib/apisix/plugins/demo/init.ljbc'
	no file '/usr/local/openresty/lualib/apisix/plugins/demo.ljbc'
	no file '/usr/local/openresty/lualib/apisix/plugins/demo/init.ljbc'
	no file '/usr/local/openresty/site/lualib/apisix/plugins/demo.lua'
	no file '/usr/local/openresty/site/lualib/apisix/plugins/demo/init.lua'
	no file '/usr/local/openresty/lualib/apisix/plugins/demo.lua'
	no file '/usr/local/openresty/lualib/apisix/plugins/demo/init.lua'
	no file './apisix/plugins/demo.lua'
	no file '/usr/local/openresty/luajit/share/luajit-2.1/apisix/plugins/demo.lua'
	no file '/usr/local/share/lua/5.1/apisix/plugins/demo.lua'
	no file '/usr/local/share/lua/5.1/apisix/plugins/demo/init.lua'
	no file '/usr/local/openresty/luajit/share/lua/5.1/apisix/plugins/demo.lua'
	no file '/usr/local/openresty/luajit/share/lua/5.1/apisix/plugins/demo/init.lua'
	no file '/usr/local/apisix/apisix/plugins/demo.lua'
	no file './apisix/plugins/demo.lua'
	no file '/usr/local/openresty/luajit/share/luajit-2.1/apisix/plugins/demo.lua'
	no file '/usr/local/share/lua/5.1/apisix/plugins/demo.lua'
	no file '/usr/local/share/lua/5.1/apisix/plugins/demo/init.lua'
	no file '/usr/local/openresty/luajit/share/lua/5.1/apisix/plugins/demo.lua'
	no file '/usr/local/openresty/luajit/share/lua/5.1/apisix/plugins/demo/init.lua'
	no file '/usr/local/openresty/site/lualib/apisix/plugins/demo.ljbc'
	no file '/usr/local/openresty/site/lualib/apisix/plugins/demo/init.ljbc'
	no file '/usr/local/openresty/lualib/apisix/plugins/demo.ljbc'
	no file '/usr/local/openresty/lualib/apisix/plugins/demo/init.ljbc'
	no file '/usr/local/openresty/site/lualib/apisix/plugins/demo.lua'
	no file '/usr/local/openresty/site/lualib/apisix/plugins/demo/init.lua'
	no file '/usr/local/openresty/lualib/apisix/plugins/demo.lua'
	no file '/usr/local/openresty/lualib/apisix/plugins/demo/init.lua'
	no file './apisix/plugins/demo.lua'
	no file '/usr/local/openresty/luajit/share/luajit-2.1/apisix/plugins/demo.lua'
	no file '/usr/local/share/lua/5.1/apisix/plugins/demo.lua'
	no file '/usr/local/share/lua/5.1/apisix/plugins/demo/init.lua'
	no file '/usr/local/openresty/luajit/share/lua/5.1/apisix/plugins/demo.lua'
	no file '/usr/local/openresty/luajit/share/lua/5.1/apisix/plugins/demo/init.lua'
	no file '/usr/local/apisix//deps/lib64/lua/5.1/apisix/plugins/demo.so'
	no file '/usr/local/apisix//deps/lib/lua/5.1/apisix/plugins/demo.so'
	no file '/usr/local/openresty/site/lualib/apisix/plugins/demo.so'
	no file '/usr/local/openresty/lualib/apisix/plugins/demo.so'
	no file './apisix/plugins/demo.so'
	no file '/usr/local/lib/lua/5.1/apisix/plugins/demo.so'
	no file '/usr/local/openresty/luajit/lib/lua/5.1/apisix/plugins/demo.so'
	no file '/usr/local/lib/lua/5.1/loadall.so'
	no file './apisix/plugins/demo.so'
	no file '/usr/local/lib/lua/5.1/apisix/plugins/demo.so'
	no file '/usr/local/openresty/luajit/lib/lua/5.1/apisix/plugins/demo.so'
	no file '/usr/local/lib/lua/5.1/loadall.so'
	no file '/usr/local/apisix//deps/lib64/lua/5.1/apisix.so'
	no file '/usr/local/apisix//deps/lib/lua/5.1/apisix.so'
	no file '/usr/local/openresty/site/lualib/apisix.so'
	no file '/usr/local/openresty/lualib/apisix.so'
	no file './apisix.so'
	no file '/usr/local/lib/lua/5.1/apisix.so'
	no file '/usr/local/openresty/luajit/lib/lua/5.1/apisix.so'
	no file '/usr/local/lib/lua/5.1/loadall.so'
	no file './apisix.so'
	no file '/usr/local/lib/lua/5.1/apisix.so'
	no file '/usr/local/openresty/luajit/lib/lua/5.1/apisix

Environment

  • APISIX version (run apisix version): 3.9.1

  • Operating system (run uname -a): Linux worker4 3.10.0-1160.el7.x86_64 change: added doc of how to load plugin. #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

  • OpenResty / Nginx version (run openresty -V or nginx -V): nginx version: openresty/1.25.3.1

  • etcd version, if relevant (run curl http://127.0.0.1:9090/v1/server_info): 3.5.17

  • APISIX Dashboard version, if relevant: not use

  • Plugin runner version, for issues related to plugin runners:

  • LuaRocks version, for installation issues (run luarocks --version): not found

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingplugin

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    Status
    ✅ Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions