Пользовательский плагин для Kong v1.0.2 включен, но не установлен

У меня есть собственный плагин для Kong, который отлично работал для Kong v0.14.1, но после обновления до v.1.0.2 он выдает ошибку.

Используемая ОС: macOS Mojave

В файле конг.конф у меня есть этот код:

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 is now installed in /usr/local/opt/kong (license: MIT)

Почему-то кажется, что Конг не может найти установленный пользовательский плагин. Любая идея, почему это происходит?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
0
5 429
3

Ответы 3

Похоже, он не может найти необходимый файл 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"
   }
}

Да, handler.lua представлен в Rockspec, и он работал на предыдущей версии Kong. Ошибка возникает, когда я пытаюсь запустить конг, а не при установке плагина.

Moldovan Daniel 25.01.2019 09:12

Загрузите плагин

Теперь вы должны добавить имя пользовательского плагина в список custom_plugins в конфигурации Kong (на каждом узле Kong):

custom_plugins = <plugin-name>

Если вы используете два или более пользовательских плагина, вставьте запятые между ними, например:

custom_plugins = plugin1,plugin2

Примечание: Вы также можете установить это свойство через его эквивалент переменной среды: KONG_CUSTOM_PLUGINS или определить пользовательский плагин в свойстве конфигурации, например:

KONG_CUSTOM_PLUGINS=<plugin-name> kong start

Напоминание: не забудьте обновить директиву custom_plugins для каждого узла в вашем кластере Kong.

Проверьте загрузку плагина

Теперь вы сможете без проблем запустить Kong. Обратитесь к инструкциям вашего пользовательского плагина, чтобы узнать, как включить/настроить ваш плагин для API или потребительского объекта.

Чтобы убедиться, что ваш плагин загружается Kong, вы можете запустить Kong с уровнем журнала отладки:

log_level = debug

ИЛИ:

KONG_LOG_LEVEL=debug

Затем вы должны увидеть следующий журнал для каждого загружаемого плагина:

[debug] Loading plugin <plugin-name>

А здесь — это обходной путь для добавления вещей в custom_plugins и lua_package_path.

  1. Добавьте собственное имя плагина в: custom_plugins = <plugin-name>
  2. Установите плагин hello-world, выполнив следующие действия:

    • Если у вас есть исходный код вашего плагина, то перейдите в него и выполните команду: luarocks make он установит ваш плагин.

    • Теперь вам нужно выполнить команду: make install-dev убедитесь, что ваш плагин имеет make-файл, например:

    • После выполнения этой команды make install-dev. Он создаст файл lua примерно так:

      /ваш-плагин-путь/**lua_modules/share/lua/5.1/конг/плагины/имя-вашего-плагина/**?.lua

    • Просто скопируйте этот путь и добавьте его в конфигурационный файл kong на lua_package_path

      lua_package_path=/путь-вашего-плагина/lua_modules/share/lua/5.1/kong/plugins/имя-вашего-плагина/?.lua

  3. Просто начните конг: kong start --vv

Лучший ответ на данный момент! Основываясь на этом ответе, я определил, где установлен плагин, в моем случае это было: «/usr/local/Cellar/kong/1.0.2/share/lua/5.1/kong/plugins/», и я установил lua_package_path=/usr/ местный/Подвал/конг/1.0.2/доля/lua/5.1/‌​?.lua;; в моем файле kong.conf, и теперь плагин найден, хотя я не знаю, почему это не происходит автоматически, как в предыдущих версиях kong.

Moldovan Daniel 28.01.2019 09:48

В ответе @ user5377037 содержится большинство важных деталей, я просто хотел упомянуть, что, начиная с Kong 0.14.x, «custom_plugins» теперь просто «плагины».

Одна из причин этого изменения заключается в том, что теперь вы можете использовать это новое имя переменной, чтобы выбирать, загружать или не загружать плагины, которые связаны с Kong — полезная функция для некоторых. Однако, если вы хотите загрузить свой пользовательский плагин И связанные с ним подключаемые модули, теперь вам нужно указать ключевое слово bundled, чтобы указать, что вы хотите оставить загруженными связанные с ним подключаемые модули.

Предварительно 0.14.x

Практический эффект заключается в том, что в Kong < 0,14.x:

custom_plugins = plugin1,plugin2

Или

KONG_CUSTOM_PLUGINS=<plugin-name>

Пост 0.14.х

В 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

Это означает, что вы настроили свой прокси на использование какого-то плагина, но теперь вы не загружаете этот плагин при запуске, поэтому Конг не знает, что делать, и уходит. По сути, вы будете загружать только один пользовательский плагин, который, вероятно, не то, что вам нужно.

lua_package_path

Примечания о lua_package_path и KONG_LUA_PACKAGE_PATH остаются такими же, как и в сообщении пользователя 5377037.

использованная литература

Другие вопросы по теме