Этот материал родился благодаря статье Простой сайт на D автора danial72. Только там был разобран момент под ОС Windows. В моей же статье, будет пошагово рассмотрен процесс подготовки рабочего окружения для создания собственного Web-проекта на языке программирования D на примере ОС Ubuntu 13.04.
Речь идет о том, если у вас сложный и ресурсоемкий проект, а мысли о том, что десятки тысяч строк php-кода будут парситься каждый раз при вызове страницы, а там и классы с наследованием, и шаблонизаторы какие-нибудь, да еще и активных пользователей будет тысячи, вызывают у вас панику и ужас, то и есть смысл подумать о рациональном и оптимальном решении для реализации такой разработки. Напротив, если вы никогда об этом и не задумывались, то вероятнее всего у вас не абы какой мощный Сервер.
Марк Цукерберг и его команда, в свое время решили эту проблему, разработав HipHop, который конвертировал PHP-скрипт в C++ и тот в свою очередь собирался в скомпилированный сервер, заточенным под этот проект. Мы же с вами, сделаем нечто похожее, только будем сразу все писать на компилируемом языке, чтоб избежать лишних трансляций кода и избежать возможных багов при этом процессе. Тем более, язык D настолько удобен, что можно с легкостью его использовать для решения своих задач.
Следующие шаги, покажут как развернуть все это дело:
- Посещаем страницу DLang.org и скачиваем дистрибутив для вашей системы.
- Далее необходимо установить DUB менеджер. С его помощью мы будем развертывать, компилировать и запускать наш проект. Нужно добавить репозиторий, ключ и обновить зависимости
$ sudo wget http://netcologne.dl.sourceforge.net/project/d-apt/files/d-apt.list -O /etc/apt/sources.list.d/d-apt.list $ sudo apt-get update && sudo apt-get -y --allow-unauthenticated install --reinstall d-apt-keyring && sudo apt-get update
После этого
$ sudo apt-get install dub
- По завершению установки, создаем папку projects, в которой будет создаваться наш проект.
$ cd /home/<имя пользователя>/projects $ dub init <имя проекта>
Эта операция, создаст в папке вашего проекта следующую структуру файлов
public/ source/ app.d views/ package.json
- Нас интересует файлик package.json. Открываем его и добавляем, следующий текст:
"dependencies": { "vibe-d": ">=0.7.16" }
Теперь, во время компиляции, DUB автоматически скачает последний пакет vibe.d
- Далее, любым редактором открываем файл app.d. Я б советовал использовать IDE, но к сожалению, полноценной IDE аля MS Visual Studio 2008 или Borland Delphi для языка D под Ubuntu я так и не нашел, а то что есть можно использовать только частично или с костылями. Свой выбор, я пока остановил на Geany.
В файле в самом начале пишем…#!/usr/bin/rdmd
эта команда указывает на то, что файл будет скомпилирован автоматически в момент выполнения, с помощью утилиты RDMD из пакета DMD.
Сам файл делаем исполняемымchmod 775
Кроме этого, заданный пример в файле, сгенерированный автоматически, можно удалить и вставить этот код
import vibe.d; import std.file; void image(HTTPServerRequest req, HTTPServerResponse res) { auto file = format("./public/images/%s", req.params["f"]); if(exists(file)) { auto image = cast(ubyte[]) read(file); res.writeBody(image,"image"); } else { res.writeBody("Not Found","text/plain"); } } void css(HTTPServerRequest req, HTTPServerResponse res) { auto css = readText(format("./public/css/%s", req.params["f"])); res.writeBody(css,"text/css"); } void index_req(HTTPServerRequest req, HTTPServerResponse res) { auto request = req.params["r"]; res.renderCompat!("index.dt", HTTPServerRequest, "req",string,"title")(req,request); } void index(HTTPServerRequest req, HTTPServerResponse res) { res.renderCompat!("index.dt", HTTPServerRequest, "req")(req); } shared static this() { auto router = new URLRouter; router.get("/:r",&index_req); router.get("/", &index); router.get("/css/:f",&css); router.get("/images/:f",&image); auto settings = new HTTPServerSettings; settings.port = 8080; listenHTTP(settings, router); }
Стили и картинки, как вы наверное успели заметить на данном примере, должны хранится в папках public/css/ и public/images/ соответственно.
В папку views необходимо добавить два файла:
layout.dt!!! 5 html head title Example page body block body
и index.dt
extends layout block body h1 Example page - Home p Hello, World!
Это шаблонизатор. Как конвертировать ваши страницы, описано здесь, а автоматический конвертер, есть здесь.
Сохраняем все наши файлы. - Переходим в папку нашего проекта и в командной строке запускаем DUB
$ cd /home/<имя пользователя/projects/<имя проекта> $ dub
Если все без ошибок, на экране должен появиться следующий текст:
Checking dependencies in '/home/<имя пользователя>/Projects/<имя проекта>' Building configuration "application", build type debug Running dmd (compile)... Compiling diet template 'index.dt' (compat)... Compiling diet template 'index.dt' (compat)... Linking... Running /tmp/dub/1994091216/<имя проекта>... Listening for HTTP requests on :::8080 Failed to listen on 0.0.0.0:8080
Последняя строка, вроде как бы и соответствует ошибке, но на самом деле это попытка прослушать IPv6, который у меня не активен. Используется только IPv4.
В окне браузера вбиваем 127.0.0.1:8080
Вуаля… наш сайт.
После любых изменений, достаточно прервать работу DUB в терминале и запустить его снова. Все файлы, автоматически перекомпилируются.
Автор: VMANTER