Развертывание сайта на Jekyll – Capistrano и Rsync
Jekyll представляет собой простой генератор статических сайтов. Он берет директорию с шаблонами и преобразует их с использованием Textile/Markdown и Liquid в обычные статические html-страницы, которые могут отдаваться напрямую через Apache, Nginx или любой другой web-сервер.
Многие уже привыкли разворачивать свои web-приложения с помощью Capistrano, запуская команду cap deploy. Поэтому удобно использовать такой же способ и для статического сайта, генерируемого при помощи Jekyll. Для этого необходимо создать Capfile в директории с Jekyll-сайтом:
Thinking Sphinx и runit
Thinking Sphinx является, пожалуй, наилучшим способом использовать Sphinx в Rails-приложении, но предлагаемый по-умолчанию вариант его запуска (rake thinking_sphinx:start) несколько сомнителен для production окружения. Как раз тут приходит на помощь runit.
Супервизор runit - идеальный способ для запуска и управления своими сервисами. Он реализует такой функционал, как:
- превращение любого процесса в демон;
- логирование вывода процесса и ротирование логов;
- запуск, остановка, рестарт, запрос состояния, управляющие скрипты для init.d;
- выключение и запуск сервисов автоматически при появлении новых сервисов в списке либо удалении старых из списка;
- возможность ведения нескольких независимых списков сервисов одновременно (например, для каждого пользователя отдельно и для системы в целом);
- удобный API для управления сервисами.
Звучит отлично! Но как же запустить через него наш Sphinx?
Установка Sphinx на Debian Lenny
Sphinx вероятно самый мощный и быстрый из всех открытых движков полнотекстового поиска. Особенно удобен тем, что имеет прямую интеграцию с популярными базами данных и поддерживает развитые возможности поиска, включая ранжирование и стемминг для русского и английского языка. Поддерживаются и нетривиальные возможности вроде распределённого поиска и кластеризации, однако фирменной фичей является очень и очень высокая скорость индексации и поиска, а также способность отлично распараллеливаться и утилизировать ресурсы современных серверов.
Скачиваем исходники со страницы загрузок Sphinx, распаковываем и переходим в директорию с ними:
tar xzf sphinx-0.9.9.tar.gz
cd sphinx-0.9.9
Поддержка баз данных регулируется параметрами configure:
--with[out]-mysql- по-умолчанию--with-mysql--with[out]-pgsql- по-умолчанию--without-pgsql
Так, например, если необходимо скомпилировать Sphinx с поддержкой PostgreSQL, но без MySQL, то конфигурируем так:
CKEditor в Ruby on Rails c загрузкой файлов через SWFUpload
Достаточно часто появляется необходимость предоставить пользователям Вашего web-приложения возможность удобно редактировать содержимое. Для обычного пользователя оптимальным вариантом является использование WYSIWYG html-редактора. Таким решением является редактор CKEditor, интерфейс которого во многом подобен интерфейсам Microsoft Word и OpenOffice Writer.
Плагин rails-ckeditor предназначен для интеграции CKEditor'а в Rails-приложение. Также он включает в себя возможность загрузки изображений и файлов из интерфейса редактора через SWFUpload.
Emacs RSpec mode
Второстепенный режим RSpec добавляет в Emacs возможность удобно вести разработку приложений в стиле BDD (Behaviour Driven Development) с использованием библиотеки для тестирования RSpec.
Пример работы RSpec mode можно увидеть на скриншоте:
Работа с буфером обмена из консоли в Mac OS X
Скопировать что-либо в буфер обмена Mac OS X из консоли довольно просто. В наличии есть команда pbcopy, которая копирует передаваемые ей данные в буфер обмена (так называемый pasteboard в OS X, поэтому команда начинается с "pb").
Использовать эту команду просто:
С помощью этого строка "test" будет скопирована в буфер обмена. Теперь можно вставить эту строку в браузер, почту или куда угодно. В случае если необходимо вставить из буфера обмена также через консоль, то можно использовать команду pbpaste:
В результате скопированная ранее строка "test" вставится в файл "file.txt".
Использование Sinatra внутри Rails Metal
С версии 2.3 в Rails присутствует Rails Metal, который позволяет обработать запросы перед попаданием их в основное приложение. Для более удобного написания кода в Rails Metal можно использовать различные фреймворки, базирующиеся на Rack, в частности фреймворк Sinatra.
Сначала необходимо создать новый Rails Metal с помощью соответствующего генератора:
create app/metal/my_embedded_sinatra.rb
В результате получается следующий Rack обработчик:
Cron и Ruby: использование Whenever
Библиотека Whenever предоставляет простой синтаксис для определения cron задач, позволяет вывести или записать crontab файл. Whenever разработана с учетом использования с Rails приложениями и развертывания через Capistrano, но может использоваться и независимо.
Для использования нужно установить гем whenever:
Интеграция KWallet и ssh-agent в среде KDE
В среде KDE можно хранить пароли к ssh ключам с помощью стандартного средства управления паролями KWallet. Команда ssh-add, добавляющая ключи в ssh-agent, позволяет использовать программу, указанную в переменной окружения SSH_ASKPASS, для получения пароля к ssh ключу.
Для KDE также существует программа Ksshaskpass, которая позволяет сохранять пароли в KWallet и затем передавать их команде ssh-add.

Sinatra и DataMapper: пример сервиса сокращения ссылок
В мире Ruby существует несколько ORM библиотек. Самая популярная библиотека ActiveRecord является и самой тяжелой, к тому же ее не особо удобно использовать вне Rails. Для небольших приложений на фреймворке Sinatra наиболее оптимальным вариантом является библиотека DataMapper, которая не уступает по функциональности, а в некоторых моментах опережает своего главного конкурента.
На примере простого сервиса сокращения ссылок рассмотрим работу с DataMapper внутри Sinatra.
Устанавливаем гемы с DataMapper и адаптером Sqlite к нему:
DataMapper состоит из нескольких библиотек, использовать будем только некоторые из них:
dm-core- ядро DataMapper'а.dm-validations- готовые методы для проверки входных данных.dm-timestamps- автоматическое создание и обновление полейcreated_at,updated_at.
В app.rb подключим необходимые библиотеки из DataMapper и настроим соединение с базой данных:

