- PVSM.RU - https://www.pvsm.ru -
Этот материал родился благодаря статье Простой сайт на D [1] автора danial72 [2]. Только там был разобран момент под ОС Windows. В моей же статье, будет пошагово рассмотрен процесс подготовки рабочего окружения для создания собственного Web-проекта на языке программирования D [3] на примере ОС Ubuntu 13.04.
Речь идет о том, если у вас сложный и ресурсоемкий проект, а мысли о том, что десятки тысяч строк php-кода будут парситься каждый раз при вызове страницы, а там и классы с наследованием, и шаблонизаторы какие-нибудь, да еще и активных пользователей будет тысячи, вызывают у вас панику и ужас, то и есть смысл подумать о рациональном и оптимальном решении для реализации такой разработки. Напротив, если вы никогда об этом и не задумывались, то вероятнее всего у вас не абы какой мощный Сервер.
Марк Цукерберг и его команда, в свое время решили эту проблему, разработав HipHop [4], который конвертировал PHP-скрипт в C++ и тот в свою очередь собирался в скомпилированный сервер, заточенным под этот проект. Мы же с вами, сделаем нечто похожее, только будем сразу все писать на компилируемом языке, чтоб избежать лишних трансляций кода и избежать возможных багов при этом процессе. Тем более, язык D настолько удобен, что можно с легкостью его использовать для решения своих задач.
Следующие шаги, покажут как развернуть все это дело:
$ 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
$ cd /home/<имя пользователя>/projects
$ dub init <имя проекта>
Эта операция, создаст в папке вашего проекта следующую структуру файлов
public/
source/
app.d
views/
package.json
"dependencies": {
"vibe-d": ">=0.7.16"
}
Теперь, во время компиляции, DUB автоматически скачает последний пакет vibe.d
#!/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!
Это шаблонизатор. Как конвертировать ваши страницы, описано здесь [7], а автоматический конвертер, есть здесь [8].
Сохраняем все наши файлы.
$ 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
Источник [9]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/38223
Ссылки в тексте:
[1] Простой сайт на D: http://habrahabr.ru/post/181548/
[2] danial72: http://habrahabr.ru/users/danial72/
[3] D: http://dlang.org
[4] HipHop: http://habrahabr.ru/search/?q=HipHop
[5] DLang.org: http://dlang.org/download.html
[6] DUB менеджер: https://github.com/rejectedsoftware/dub/
[7] здесь: http://naltatis.github.io/jade-syntax-docs/
[8] здесь: http://html2jade.aaron-powell.com/
[9] Источник: http://habrahabr.ru/post/185878/
Нажмите здесь для печати.