Managing modules | Tarantool
Документация на русском языке
поддерживается сообществом

Managing modules

This section covers the installation and reloading of Tarantool modules. To learn about writing your own module and contributing it, check the Contributing a module section.

Модули на Lua и C от разработчиков Tarantool и сторонних разработчиков доступны здесь:

  • Репозиторий модулей Tarantool (см. ниже)
  • Репозитории deb/rpm Tarantool (см. ниже)

Для получения подробной информации см. README в репозитории tarantool/rocks.

Выполните следующие действия:

  1. Установите Tarantool в соответствии с рекомендациями на странице загрузки.

  2. Install the module you need. Look up the module’s name on Tarantool rocks page and put the prefix «tarantool-» before the module name to avoid ambiguity:

    $ # для Ubuntu/Debian:
    $ sudo apt-get install tarantool-<module-name>
    
    $ # для RHEL/CentOS/Amazon:
    $ sudo yum install tarantool-<module-name>
    

    Например, чтобы установить модуль vshard на Ubuntu, введите:

    $ sudo apt-get install tarantool-vshard
    

Теперь можно:

  • загружать любой модуль с помощью

    tarantool> name = require('module-name')
    

    например:

    tarantool> vshard = require('vshard')
    
  • локально находить установленные модули с помощью package.path (Lua) или package.cpath (C):

    tarantool> package.path
    ---
    - ./?.lua;./?/init.lua; /usr/local/share/tarantool/?.lua;/usr/local/share/
    tarantool/?/init.lua;/usr/share/tarantool/?.lua;/usr/share/tarantool/?/ini
    t.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;/
    usr/share/lua/5.1/?.lua;/usr/share/lua/5.1/?/init.lua;
    ...
    
    tarantool> package.cpath
    ---
    - ./?.so;/usr/local/lib/x86_64-linux-gnu/tarantool/?.so;/usr/lib/x86_64-li
    nux-gnu/tarantool/?.so;/usr/local/lib/tarantool/?.so;/usr/local/lib/x86_64
    -linux-gnu/lua/5.1/?.so;/usr/lib/x86_64-linux-gnu/lua/5.1/?.so;/usr/local/
    lib/lua/5.1/?.so;
    ...
    

    Примечание

    Знаки вопроса стоят вместо имени модуля, которое было указано ранее при вызове require('module-name').

Любое приложение или модуль Tarantool можно перезагрузить с нулевым временем простоя.

Ниже представлен пример, который иллюстрирует наиболее типичный случай – «обновление и перезагрузка».

Примечание

In this example, we use recommended administration practices based on instance files and tt utility.

  1. Обновите файлы приложения.

    Например, модуль в /usr/share/tarantool/app.lua:

    local function start()
      -- начальная версия
      box.once("myapp:v1.0", function()
        box.schema.space.create("somedata")
        box.space.somedata:create_index("primary")
        ...
      end)
    
      -- код миграции с 1.0 на 1.1
      box.once("myapp:v1.1", function()
        box.space.somedata.index.primary:alter(...)
        ...
      end)
    
      -- код миграции с 1.1 на 1.2
      box.once("myapp:v1.2", function()
        box.space.somedata.index.primary:alter(...)
        box.space.somedata:insert(...)
        ...
      end)
    end
    
    -- запустить файберы в фоновом режиме, если необходимо
    
    local function stop()
      -- остановить все файберы, работающие в фоновом режиме, и очистить ресурсы
    end
    
    local function api_for_call(xxx)
      -- сделать что-то
    end
    
    return {
      start = start,
      stop = stop,
      api_for_call = api_for_call
    }
    
  2. Обновить файл экземпляра.

    Например, /etc/tarantool/instances.enabled/my_app.lua:

    #!/usr/bin/env tarantool
    --
    -- пример горячей перезагрузки кода
    --
    
    box.cfg({listen = 3302})
    
    -- ВНИМАНИЕ: правильно выполните разгрузку!
    local app = package.loaded['app']
    if app ~= nil then
      -- остановите старую версию приложения
      app.stop()
      -- разгрузите приложение
      package.loaded['app'] = nil
      -- разгрузите все зависимости
      package.loaded['somedep'] = nil
    end
    
    -- загрузите приложение
    log.info('require app')
    app = require('app')
    
    -- запустите приложение
    app.start({some app options controlled by sysadmins})
    

    Самое главное – правильно разгрузить приложение и его зависимости.

  3. Вручную перезагрузите файл приложения.

    For example, using tt:

    $ tt connect my_app -f /etc/tarantool/instances.enabled/my_app.lua
    

После компиляции новой версии модуля на C (библиотека общего пользования *.so), вызовите функцию box.schema.func.reload(„module-name“) из Lua-скрипта для перезагрузки модуля.

Нашли ответ на свой вопрос?
Обратная связь