понедельник, 12 сентября 2011 г.

Передача клиенту дополнительной информации при REST запросах

Подобного не встречал, но думаю что я не первый кто до этого додумался. Что бы не передавать в теле ответа мета информацию, её можно передавать в HTTP-заголовке. Произвольные поля в заголовок можно передавать с префиксом "X-". Хочу показать как подобное реализовать на рельсах и как удобно получать эти заголовки на JS-клиенте. Ну за одно покажу как избежать одного нюанса. Я покажу на примере передачи flash сообщений при JSON-запросов.

воскресенье, 21 августа 2011 г.

Включаем журналирование для MongoDB

Начиная с версии 1.7.5 в MongoDB появилось журналирование. Включение журналирования позволяет избавиться от ручного восстановления базы после сбоя. Правда журналирование замедляет скорости записи. Начиная с версии 1.9.2 для 64-х битных систем журналирование включено по умолчанию. Для 32-битной версии и предыдущих версий журналирование нужно включать вручную. Нужно добавить в конец файла настроек (обычно /etc/mongodb.conf) следующею строку:
journal=true
 Ну и для немедленного применения настроек нужно перезагрузить MongoDB. Это делается так:
sudo /etc/init.d/mongodb start 

понедельник, 15 августа 2011 г.

Опыт частичного перехода с Rails 3.0.9 на Rails 3.1.rc5

Решил попробовать перевести свой текущий проект на Rails 3.1(rc5). Создал новую ветку в репозитории, создал новый гемсет в rvm.
Заменил в Gemfile строку:
gem 'rails', '3.0.9'
На строку:
gem 'rails', '~> 3.1.rc5'
Обновил все гемы:
bundle update
Запускаю тесты:
rspec spec/
Приблизительно 10% валятся. Все сломанные тесты для контроллеров. Все ошибки были из-за того, что раньше при тесте контролера через rspec параметры предавались в контроллер напрямую, а теперь всё переводится в строки. Например, если раньше вызов:
put :move, :id => 1, :derection => :down
раньше передавал в контроллер непосредственно 1 и :down, то теперь это будет '1' и 'down' соответственно. 

Как я понял это сделали, что бы вызовы методов контроллеров были больше похожи на вызовы браузера.

Других ошибок пока не было, но я ещё не включал новые возможности рельс.

среда, 27 июля 2011 г.

Включаем русскую локализацию в Mongoid

Сегодня всё утро провёл в попытках включить русскую локализацию в Mongoid версии 2.0.2. Сама локализация есть, но не активирована по умолчанию. По умолчанию активирована только английская локализация. Для включения всех остальных нужно вызвать во время инициализации приложения метод Mongoid.add_language, параметром передаётся аббревиатура языка. Я добавил Mongoid.add_language('ru') в cсамый конец файла config/application.rb. Список доступных локализаций можно посмотреть тут.

P.S. Если кто знает более красивый способ включения локализаций, то пожалуйста напишите его в комментариях.

суббота, 16 июля 2011 г.

Восстановление виртуальной машины в Virtual Box после не удачного сохранения состояния

У меня частые перебои с электричеством, причём настолько часты что безперебойник не всегда успевает подзарядиться. Бесперебойник у меня подключен к компьютере по usb. И когда он начинает работа, Virtual Box сам автоматически сохраняет состояния виртуальных машин. Но если безперебойник не успел зарядиться. то компьютер выключается до полного сохранения виртуальны машин. И после этого при запуске виртуальных машин вываливается ошибка. Что бы запустить эти виртуальные машины нужно сбросить их через контекстное меню, как это показано на скриншоте.

Картинка кликабельна

пятница, 15 июля 2011 г.

Обновление ядра linux в виртуальной машине VirtualBox

При работе с linux'ом в виртуальной машине VirtualBox есть одно, периодически проявляющиеся, неудобство. После обновление ядра linux'а или самого VirtualBox'а перестаёт работать гостевое дополнение (Guest Additions) и каждый раз приходиться его вручную обновлять. Причём об этом я вспоминаю после первой перезагрузки и приходится ставить дополнение и опять перегружать. Не очень приятно ждать.

четверг, 28 апреля 2011 г.

Настройка rspec с autotest и spork

Цель
Настроить тестирование приложения Rails 3. Инструмент для тестирования должен обладать следующими свойствами:

  1. Выполнение тестов автоматически после сохранения любого файла проекта. Что бы не приходилось после каждого сохранения лезть в консоль и запускать тесты вручную.
  2. После выполнения тестов, будет показывать уведомление с результатами. Что бы не ждать выполнения тестов, а продолжать работу.
  3. Выполнение тестов должно происходить как можно быстрее. Думаю тут всё понятно.

понедельник, 21 февраля 2011 г.

Восстановление базы MongoDB в Debian 5.0(lenny)



В одном проекте решил использовать MongoDB. Но после аварийного перезапуска(хостером), mongodb не стартует. Процесс восстановления не сложен, но есть некоторые нюансы.

Все следующие действия я проделывал на сервере с Debian 5.0(lenny) и на Ubuntu 10.10, запущенной в виртуалке на домашней машине.

Первым делом удалим файл блокировки базы:

sudo rm /var/lib/mongodb/mongod.lock

Дальше собственно восстановление базы:

sudo -u mongodb mongod --repair -f /etc/mongodb.conf

Ну и запускаем сервер:

sudo /etc/init.d/mongodb start

Если сервер не запустится, то можно попробовать удалить файл mongo.lock, как это показано выше и попробовать запустить сервер снова.

Обновление 03.05.2011

Упростил процесс восстановления.
И проверил работоспособность на Ubuntu 10.10.

Обновление 21.08.2011
Уже не актуально ввиду появления журналирования у MongoDB. Подробней тут. 

пятница, 4 февраля 2011 г.

Добро пожаловать

Все привет. Этот блог я создал довольно давно, но не наполнял его. Хочу это исправить.

Немного обо мне

Я живу в Краснодаре и учусь на пятом курсе ФПМ'а КубГУ. В свободное от учёбы время я занимаюсь разработкой сайтов. На данный момент я сделал два ныне работающих сайта(один, второй) и один уже не работающий. Раньше писал на PHP, сейчас пересел на Ruby on Rails. Курсовые для универа я писал на Delphi, Java(ME/SE/EE) и Groovy. В свободное время немного изучал C# и Python.
Порядок изучения языков программирования был приблизительно таким: Qbasic(1), VisuialBasic .NET(1), JavaScript(4), Python(2), Pascal(2), C#(2), PHP(4), Delphi(3), Java(4+), Groovy(3), Ruby(4). В скобках я указал свой приблизительный уровень знания языка по пятибалльной шкале. Да, я не считаю что знаю хоть один язык хорошо.