Временами "хочется странного". В частности, периодически меня "клинит" на освоение какого-нибудь нового ЯП. Например, Лисп мне не дает покоя уже довольно длительное время. И периодически я к нему возвращаюсь, что-то делаю, не понимаю, надоедает — и я опять откладываю до "следующего раза". На этот раз мне резко захотелось задействовать Лисп в качестве фреймворка при разработке чего-нибудь сайтоподобного.

Очередная попытка осилить Lisp привела к появлению данной заметки. На этот раз попытаемся задействовать его для разработки web-сайта.

Установка

Реализаций Lisp’а существует великое множество. Устанавливать было решено SBCL (Steel Bank Common Lisp). Данный вариант присутствует практически во всех дистрибутивах Linux.
Если в вашем дистрибутиве используется yum, то установка будет заключаться в команде yum install sbcl

Если же по каким-то причинам установить лисп из пакетов не получается, придется ставить из исходников.

При установке из портов (пакетов), SBCL обычно находится по пути "/usr/bin/sbcl"; если же он ставился из исходников, то по умолчанию он будет лежать в "/usr/local/bin/sbcl". Проверить место дислокации sbcl можно командой whereis sbcl.

Установка Hunchentoot и CL-WHO

Сам по себе SBCL — это по сути только ядро, а для полноценной работы необходимо доставить необходимые библиотеки из Интернета. Делается это достаточно просто с помощью системы под названием asdf-install — которая входит в SBCL изначально.

Пока из дополнительных пакетов нам понадобятся Hunchentoot (веб-сервер) и CL-WHO (библиотека для использования HTML-шаблонов). Установка упомянутых библиотек производится следующими действиями:

# /usr/local/bin/sbcl
* (require ‘asdf-install)
* (push :hunchentoot-no-ssl *features*)
* (asdf-install:install :hunchentoot)

 

Этим набором команд мы инициируем закачку из Интернета и установку необходимых нам библиотек (в частности, hunchentoot). В процессе инсталляции потребуются и другие модули, требующиеся для работы наших библиотек. Для каждого такого модуля система спросит, устанавливать ли его для всех пользователей или только для текущего. Рекомендуется устанавливать для всех ("system-wide").

В процессе инсталляции система может указать на некорректность сигнатуры — в данном случае необходимо нажать "0" и продолжить установку.

Теперь надо похожим образом установить библиотеку HTML-шаблонов CL-WHO:

* (asdf-install:install :cl-who)

Если никаких error’ов не было, значит все прошло успешно, и можно попробовать запустить наш лисповый веб-сервер для теста:

* (require ‘asdf)
* (asdf:oos ‘asdf:load-op :hunchentoot-test)
* (hunchentoot:start (make-instance ‘hunchentoot:acceptor :port 4242))

 

Теперь если вы введете в командной строке браузера адрес "http://127.0.0.1:4242" — вы увидите тестовую страницу веб-сервера.

Автоматизация загрузки

Пока наш чудный лисп-веб-сервер (по сути это application server on lisp) запускается только вручную и таки довольно корявенько. Было бы гораздо удобнее, если бы мы могли его запускать более простым (стандартным) способом без прав root’а; а если бы он при этом еще мог запускаться автоматически при загрузке системы — можно было бы вообще приблизиться к интеллектуальному оргазму.

Для начала заведем пользователя:

# adduser -d /var/lib/hunchentoot -c "Hunchentoot" -M -r htoot
# mkdir /var/lib/hunchentoot
# chown htoot:htoot /var/lib/hunchentoot
# chmod go-rwx /var/lib/hunchentoot

Теперь нам понадобятся два файлика:
1. файл для запуска (http://storinka.com.ua/files/startup.lisp), который будет лежать в домашнем каталоге /var/lib/hunchentoot
2. файл для запуска (http://storinka.com.ua/files/hunchentoot), который будет располагаться в /etc/init.d/

Их надо скачать с моего сайта и покласть в соответствующих директориях:

# cd /var/lib/hunchentoot
# wget http://storinka.com.ua/files/startup.lisp
# cd /etc/init.d
# wget http://storinka.com.ua/files/hunchentoot
# chown root:root hunchentoot

Теперь запуск и останов нашего сервера можно осуществлять через /etc/init.d/hunchentoot start|stop

Результаты дальнейших экспериментов будут отражены в следующих выпусках.

 

 

 

Мой блог находят по следующим фразам





Опубликовать в twitter.com

0