Управление модулями
В этом разделе описывается установка и перезагрузка модулей Tarantool.
Модули на Lua и C от разработчиков Tarantool и сторонних разработчиков:
Подробнее см. файл README в
репозитории tarantool/rocks.
Выполните следующие действия:
-
Установите Tarantool, как описано на странице загрузки.
-
Установите нужный модуль. Найдите имя модуля на странице Tarantool rocks и добавьте префикс
tarantool-перед именем модуля во избежание неоднозначности:$ # for Ubuntu/Debian:$ sudo apt-get install tarantool-<module-name>$ # for 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/?/init.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-linux-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;...
Любое приложение или модуль Tarantool можно перезагрузить с нулевым временем простоя.
Ниже приведен пример, иллюстрирующий типичный случай обновления и перезагрузки.
-
Обновите файл приложения. Например, модуль в
/usr/share/tarantool/app.lua:local function start()-- initial versionbox.once("myapp:v1.0", function()box.schema.space.create("somedata")box.space.somedata:create_index("primary")...end)-- migration code from 1.0 to 1.1box.once("myapp:v1.1", function()box.space.somedata.index.primary:alter(...)...end)-- migration code from 1.1 to 1.2box.once("myapp:v1.2", function()box.space.somedata.index.primary:alter(...)box.space.somedata:insert(...)...end)end-- start some background fibers if you needlocal function stop()-- stop all background fibers and clean up resourcesendlocal function api_for_call(xxx)-- do some businessendreturn {start = start,stop = stop,api_for_call = api_for_call} -
Обновите файл экземпляра. Например,
/etc/tarantool/instances.enabled/my_app.lua:#!/usr/bin/env tarantool---- hot code reload example--box.cfg({listen = 3302})-- ATTENTION: unload it all properly!local app = package.loaded['app']if app ~= nil then-- stop the old application versionapp.stop()-- unload the applicationpackage.loaded['app'] = nil-- unload all dependenciespackage.loaded['somedep'] = nilend-- load the applicationlog.info('require app')app = require('app')-- start the applicationapp.start({some app options controlled by sysadmins})Самое главное - правильно выгрузить приложение и его зависимости.
-
Перезагрузите файл приложения вручную. Например, с помощью
tt:$ tt connect my_app -f /etc/tarantool/instances.enabled/my_app.lua
После компиляции новой версии модуля на C (библиотека общего пользования *.so), вызовите функцию
box.schema.func.reload('module-name')
из Lua-скрипта для перезагрузки модуля.