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 и сторонних разработчиков доступны здесь:
Для получения подробной информации см. README в репозитории tarantool/rocks.
Выполните следующие действия:
Установите Tarantool в соответствии с рекомендациями на странице загрузки.
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.
Обновите файлы приложения.
Например, модуль в
/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 }
Обновить файл экземпляра.
Например,
/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})
Самое главное – правильно разгрузить приложение и его зависимости.
Вручную перезагрузите файл приложения.
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-скрипта для перезагрузки модуля.