# Программы для веб дизайна

В последнее время активно занимаюсь веб-разработкой, создаю темы для *Wordpress*, изучаю *jquery*. Все это требует наличия локального веб-сервера, так как работать на удаленном сервере не очень удобно, тем более на сервере, находящемся в работе. Естественно возник вопрос о том, что выбрать в качестве локального веб-сервера.

Можно, конечно, установить весь набор **LAMP** на локальную машину и при необходимости запускать нужные сервисы. Но в моем случае это несколько обременительно, так как работаю в основном со статическими сайтами. И недавно нашел простое, но очень эффективное решение!

## Подготовка

Как не странно, но все необходимые для разработки программы были написаны на **Ruby**. Поэтому на машине устанавливаем все необходимое (у меня Debian stable, примеры буду приводить для данной операционной системы):

```shell
$ sudo aptitude install ruby libzlib-ruby rdoc irb rubygems
```

База готова, теперь все последующие операции будут проходить через пакетный менеджер *Rubygems*.

## Serve

**Serve** -- это локальный веб-сервер, очень быстрый и с возможностью запуска в любой директории компьютера. Но если быть совсем точным, то это не сам веб-сервер, а обертка к существующим серверам.

По умолчанию *Serve* использует для своей работы *Webrick*, который довольно медленно запускается, поэтому сразу же установим и **Thin**:

```shell
$ sudo gem install serve thin
```

В *Ruby* есть три веб-сервера, которые можно использовать в своей работе:

1. **Webrick**
2. **Thin**
3. **Mongrel**

Что выбирать, зависит только от нас. Я предпочитаю использовать *Thin*. После установки его даже не нужно настраивать, *Serve* автоматически определит его наличие в системе и будет использовать именно его.

Для того, чтобы запустить локальный веб-сервер достаточно перейти в директорию, содержащую файлы и затем дать команду:

```shell
$ serve
```

Если используется *Webrick*, то придется подождать пару секунд, в случае же использования *Thin* он сразу становиться активным. И достаточно в браузере перейти по адресу:

```text
http://localhost:4000
```

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

```shell
$ serve 4000               # a custom port
```

```shell
$ serve 192.168.1.6        # a custom IP
```

```shell
$ serve 192.168.1.6:4000   # a custom IP and port
```

Более подробную информацию можно получить на официальной странице [Serve][1].

## Jammit

Для минимизации и комбинирования css и js файлов я долгое время использовал *juicer*, о чем не так давно писал в своей статье [Juicer - комбинируем CSS и JavaScript файлы][2]. Однако после перехода на **Debian** столкнулся с проблемой ее установки. Пришлось искать альтернативу.

Довольно быстро нашел упоминание на проект [Jammit][3].

Устанавливается так же просто, как и все, что связанно с **Ruby**:

```shell
$ sudo gem install jammit
```

Теперь в директории нашего проекта достаточно будет создать файл конфигурации `assets.yml`, в котором указываем ряд параметров:

```yaml
package_assets:         off         # (on, off, always)
embed_assets:           off         # (on, off, datauri)
compress_assets:        on          # (on, off)
gzip_assets:            off         # (on, off)
template_function:      _.template  # (defaults to the built-in micro-templating)
package_path:           packages    # (defaults to assets)
javascript_compressor:  closure     # (yui, closure)

stylesheets:
master:
    - _css/style.css
    - _css/jquery.fancybox-1.3.4.css
    - _css/ui.totop.css
    - _css/highlight.css

javascripts:
master:
    - _js/jquery.fancybox-1.3.4.js
    - _js/jquery.ui.totop.js
    - _js/main.js
```

Первые 7 строк описывают, что будет использовать и как будет использоваться, какие пакеты при этом будут использоваться. Самое интересное это блоки stylesheets и javascripts, в которых указывается, какие файлы будут созданы и какие файлы будет использоваться для их генерации.

В приведенном примере используется только компрессия данных и в случае с *js* для компрессии используется *closure*. Создается один результирующий css-файл с именем `master.css` и один результирующий js-файл с именем `master.js`. Используемые для генерации файлы прописаны в соответствующих блоках, причем важен и порядок их указания. В данном случае файлы стилей и файлы скриптов располагаются в своих отдельных директориях.

Результирующие файлы располагаются в директории `assets`. Однако все настройки можно изменять путем вызова *jammit* из командной строки с соответствующими параметрами.

Например:

```shell
$ jammit -c _assets.yml -u http://www.juev.ru -o assets
```

В данном случае используются следующие параметры:

1. **-c** указывает на используемый файл конфигурации.
2. **-u** используется для указания на текущий домен сайта
3. **-o** служит для указания директории в которой будут располагаться результирующие файлы.

Программа не настолько функциональна, как *juicer*, но работает очень стабильно и хорошо.

## Вывод

Таким образом, установив на свой компьютер **Ruby** мы получаем в свои руки инструменты, на порядок упрощающие работу по созданию веб-сайтов. Здесь и веб-сервера и программы оптимизации файлов стилей и используемых скриптов.

К тому же, именно на **Ruby** написан *Jekyll*, который я использую для генерации своего сайта. Все что необходимо веб-разработчику, все это есть. Почему бы не использовать данную возможность?

[1]: https://github.com/jlong/serve "jlong/serve - Github"
[2]: http://www.juev.ru/2011/03/09/minify-and-combine-js-css-file/
    "Juicer - комбинируем CSS и JavaScript файлы"
[3]: http://documentcloud.github.com/jammit/
    "Jammit: Industrial Strength Asset Packaging for Rails"

