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