Tarantool — первые шаги

Данный материал предназначен для новичков. Кому-то эти вещи могут показаться естесственными и не требующими разъяснения. Но чтобы мне во всём разобраться — пришлось потратить целый день. Цель — настроить среду для использования Tarantool-а как сервера приложений.

Установка

Не Windows

Страничка, где разъясняется, как устанавливать, находится здесь. Однако после установки основного пакета, для ведения разработки, потребуется ещё установить пакет tarantool-dev. Выполните следующую команду (для Ubuntu, для других ОС что-то аналогичное):

sudo apt-get -y install tarantool-dev

Кроме того надо добавить ещё пакет http.server, в стандартной поставке его почему-то нет. Хотя это основа в общем то главной фишки этого продукта. Как устанавливать, написано здесь. Сначала блок команд — клонируем репозиторий и собираем модуль. Делать из домашней директории пользователя! Это который устанавливается по умолчанию при запуске терминального окна.

git clone https://github.com/tarantool/http.git
cd http && cmake . -DCMAKE_BUILD_TYPE=RelWithDebugInfo
make
make install

Сделали блок команд — вернулись в домашнюю директорию и выполняем команду установки модуля. Там или-или — предлагается два варианта.

tarantoolctl rocks install http

или

luarocks install https://raw.githubusercontent.com/tarantool/http/master/rockspecs/http-scm-1.rockspec --local

Я делал через tarantoolctl. Попутно может потребоваться какие-то модули системы установить — система напишет. Например у меня не было cmake:

sudo apt install cmake

После этого можно написать модуль *.lua и запустить его, всё должно работать, в том числе сервер:

$ tarantool test.lua

Windows

Для винды используем Docker. Образ, который мы скачиваем содержит только один порт для коннекторов. Для использования как сервера приложений нам потребуется ещё два порта — один для входящих HTTP-соединентй, второй — для отладки. Поэтому нужно создать ещё один образ, который будет опираться на тот, что мы скачали. Новый Docker-образ (файлик):

FROM tarantool/tarantool:latest
EXPOSE 8081
EXPOSE 9966

В данном примере для входящих соединений HTTP выбран порт 8081. Для отладки — 9966.

Регистрируем его:

docker build -t tarantool-ext .

При запуске указываем соответствие портов образа портам хоста. Скорее всего будут совпадать. И нужно указать соответствие директорий образа директориям хоста:

  • /var/lib/tarantool — папка для данных
  • /opt/tarantool — папка для исходников (там где ваши модули будут лежать)

Разумеется, при необходимости можно ещё папок добавить. Запускаем образ и в консоли можно запускать модули. Всё должно работать и принимать входящие соединения. Например:

tarantool /opt/tarantool/test.lua

ВАЖНО! В сборке докер-образа лежит другой модуль http.server. Пример его использования можно посмотреть здесь и здесь. В принципе он почти такой же, просто программный интерфейс другой.

Среда разработки (IDE)

Редактор

Если не нужна отладка, можно использовать любой редактор кода. Например Atom. Вполне замечательный.
Но можно и с отладкой. Для меня стало открытием, что есть бесплатная версия редактора от JetBrains: вот и вот.

Отладчик

Как настроить отладчик — написано здесь. Но оно не совсем работает — простые выражения да, но всё крашится на первой серьёзной команде, например box.cfg{}. Все перечисленные в документации инструкции нужно выполнить, но в Run/Debug configurations выбираем, тыкнув на плюсик в левой панели: Emmy Debugger. Работает он не совсем привычно. Там есть два варианта, лучше выбирать IDE connect debugger. В варианте Debugger connect IDE не работают точки останова. Там каждая строка — это точка останова.
Далее копируем представленный код и вставляем в свою программу. Например в начало программы. Далее запускаем отдельно от IDE свою программу:

tarantool myprog.lua

А затем в IDE запускаем отладку. Всё — отладка прекрасно работает!
Механизм тут такой — программа выступает в роли сервера, IDE к ней подключается и через это взаимодействие происходит отладка. По второму варианту (Debugger connect IDE) схема действий та же — только сначала запускаем отладку, а затем программу.

Благодарности

Спасибо Nemat Rakhmatov из телеграмм-канала Tarantool за небольшую подсказку.