Глобальные переменные в Rails

При разработке возникает вопрос хранения глобальных переменных:

  • токены для сторонних сервисов
  • почта куда будут приходить уведомления
  • url сайта для майлеров
  • ключ для шифрования cookies

И всё в том же духе.

Есть две причины вытащить все эти вещи в отдельный файл — удобство редактирования настрок и удобство исключения всего одного файла из репозитория (из соображений безопасности).

Параметры по умолчанию для rails new

Обычно я пишу примерно такую команду, чтобы создать приложение:

rails new solar_system --skip-test-unit --skip-bundle -d postgresql

Чтобы не указывать эти флаги каждый раз, можно создать .railsrc:

echo "--skip-bundle
--skip-test-unit
--database=postgresql" > ~/.railsrc

Поиск пакета по команде

Устанавливаем утилиту:

pacman -S pkgfile

Обновляем базу:

sudo pkgfile --update

Ищем пакет содержащий команду cgdisk:

pkgfile cgdisk 

Результат:

extra/gptfdisk

html2rss — flick

Очень простенькое веб-приложение, которое генерирует atom ленту о выходящих в московский прокат фильмах. Чтобы не пропустить возвращение The Big Lebowski, например.

http://flick.dobroserver.ru/

  1. С помощью nokogiri строим массив хешей с фильмами (при этом берём только фильмы с рейтином >= 7).
  2. Отправляем на покой полученные раньше фильмы (если фильма нет в последнем массиве, то кинотеатры он покинул).
  3. Создаём новые фильмы и выводим в atom ленту / index.

Всё это дело происходит в rake таске, который каждый час запускает whenever.

Можно использовать для получения rss из любого другого html.

Если мне понравится ходить по кинотеатрам — всё будет намертво закешировано и покрыто тестами. И возможно на более легковесном фреймворке.

Стримим видео с сервера по Wi-Fi

Итак у вас есть домашний сервер и несколько разных устройств — настольный компьютер, ноутбук, телевизор, планшет, телефон.

Вы можете хранить всю необходимую информацию на сервере и воспроизводить на любом из этих устройств. Начать смотреть фильм на кухне с планшета и досмотреть его уже с телевизора в другой комнате.

Чтобы воспроизводить действительно тяжёлые файлы (10-20 G) просто примонтировать сервер через sshfs недостаточно, нужно использовать DLNA.

Метки для Ruby кода

Для Руби кода можно использовать специальные комментарии:

# TODO add named_scopes
# FIXME method A is broken
# OPTIMIZE improve the code

И просматривать их с помощью rake notes:

app/controllers/application_controller.rb:
  * [ 6] [TODO] Продумать авторизацию

app/models/comment.rb:
  * [ 8] [TODO] exclusion registered users nicks

app/models/message.rb:
  * [ 8] [TODO] antispam

app/models/tag.rb:
  * [27] [FIXME] игнорировать не уникальные slug

app/views/posts/show.html.slim:
  * [14] [OPTIMIZE] переписать этот ужас

app/views/shared/_sidebar.html.slim:
  * [25] [TODO] icon.png

При этом можно смотреть метки только одного типа:

rake notes:todo
rake notes:fixme
rake notes:optimize

Или даже свои собственные:

rake notes:custom ANNOTATION=MYANNO

И ещё один плюс меток в том, что они обычно подсвечиваются в текстовых редакторах.

Синхронизируем среду разработки с production

Во время разработки зачастую нужно синхронизировать локальную базу и файлы с production.

Для этого отлично годится Capistrano.

twmn — уведомления для тайловых WM

/uploads/posts/twmn-uvedomleniya-dlya-taylovyih-wm/images/preview_twmn.png

Простая система уведомлений, которая хорошо вписывается в традиционный для тайловых WM стиль.

Но, конечно, тайлинг не обязательное условие, twmn прекрасно работает с любым менеджером окон и придётся по вкусу любителям минимализма.