Записи с тегом «Ruby on Rails»

Ставим рубиновый типограф на Рельсы

25.11.2009

В продолжение вчерашней темы, добавил простой способ типографить избранные поля в модели ActiveRecord.

Достаточно написать в нужной модели примерно следующее:

class Article < ActiveRecord::Base
  typograf :title, :use_p => false, :use_br => false
  typograf :content, :teaser
end

И тогда каждый раз перед сохранением (конкретнее, перед проверкой правильности полей) будет проходить типографирование этих полей, посредством Типографа студии Артемия Лебедева.

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

  • для одного конкретного поля:
    typograf :content
  • можно указать параметры для типографирования этого поля:
    typograf :content, :entity_type => AlsTypograf::NO_ENTITIES
  • для нескольких полей сразу (тоже с возможностью объявить параметры типографирования, общие для всех объявленных полей):
    typograf :skills, :achievements, :additional, :use_br => false, :use_p => true
  • для нескольких полей сразу (но с объявлением параметров для каждого конкретного поля):
    typograf :foo => {:entity_type => AlsTypograf::HTML_ENTITIES},
             :bar => {:use_p => true, :use_br => false},
             :baz => {:max_nobr => 5},
             :some_other_field_name => {}

Все эти варианты могут комбинироваться друг с другом внутри одной модели произвольное количество раз (но если параметры типографирования для одного и того же поля были указаны в вызовах несколько раз, будут применяться только последние).

Интеграция WYSiWYG-редактора TinyMCE в рельсовые приложения

15.09.2009

Вчера закончил работу (ну, её было не очень много) по переделыванию плагина TinyMCE для рельсов в полноценный gemТеперь редактировать текстовые данные в рельсовых приложениях ещё проще.

Достаточно вставить в environment.rb:

config.gem 'tiny_mce', :source => 'http://gemcutter.org/'

В нужный контроллер:

uses_tiny_mce :only => [:new, :create, :edit, :update]

В обёртку:

= include_tiny_mce_if_needed

А в представлении указать у нужного поля текста класс mceEditor:

- form_for @page do |f|
  = f.text_area :content, :class => 'mceEditor'

После этого остановите свой проект, наберите в командной строке rake gems:install, запустите проект снова — файлы для TinyMCE автоматически установятся в нужное место. Если вы обновите гем (например, в связи с обновлением кода TinyMCE его авторами) — удалите public/javascript/tiny_mce, перезапустите приложение и новые файлы лягут в нужное место.

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

Ссылки проекта:

Совместное использование Cucumber и Factory_Girl или роковая ошибка create_time_zone_conversion_attribute?

01.04.2009

Недавно открыл для себя Cucumber — утилиту для описания поведения вашего приложения. Весьма хорошая штука, доложу вам. Но о ней конкретно я расскажу как-нибудь потом.

Ещё я использую вместо стендовых данных (известных также как fixtures) замечательный гем от ThoughtBot под названием Factory Girl — он позволяет делать «заготовки» моделей и ваще очень крут (о нём — как вы, может быть, уже догадались — тоже в другой раз).

Но вот соединить их при тестировании одного проекта оказалось не так-то просто! При тестировании функционала каждый сценарий, начиная со второго использования метода Factory.create вылетал с ошибкой. Как показал бэктрэйс — ошибка случалась в функции ActiveRecord::Base.create_time_zone_conversion_attribute? Гугл рассказал мне, что разработчики рельсов решают эту проблему уже очень долго, и хотя патч, решающий её, давно найден — всё никак не вольют его в основной код. И на то есть веские причины, а именно — утечка мозгов памяти в production-режиме.

Тем не менее, при тестировании функционала эта утечка памяти не так критична, потому как тестовый сервер Cucumber’а запускается и останавливается регулярно — при каждом прогоне, а сервер приложения висит довольно долго и может отъесть довольно большой кусок памяти и подавиться им. Ну, надоели вступительные слова, вот…

…решение проблемы:

Необходимо поместить в директорию lib файл activerecord_reset_sublass_fix.rb, а так же добавить его вызов в файл config/environments/test.rb следующим образом:

Установка Ruby on Rails в Ubuntu (для разработки)

29.09.2008

Я постараюсь поддерживать эту статью в актуальном состоянии. На данный момент, все действия, описанные в статье, актуальны для следующих версий ПО:

  • Ubuntu Karmic Koala (9.10)
  • Ruby 1.8.7 (2009-06-12 patchlevel 174)
  • Rubygems 1.3.5
  • Ruby on Rails 2.3.4

Установка Ruby

В репозиториях Убунту лежит актуальная версия интерпретатора Ruby, поэтому для установки Ruby хватит одной стандартной команды:

sudo apt-get install ruby-full build-essential libruby-extras libsqlite3-ruby

Установка Rubygems

  1. RubyGems в репозитории Ubuntu Karmic пока актуальные, поэтому можно смело ставить из репозитория командой:
    sudo apt-get install rubygems
  2. Однако, если вы предпочитаете ручную установку RubyGems, воспользуйтесь следующими командами:
    wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz
    tar xzvf rubygems-1.3.5.tgz
    cd rubygems-1.3.5
    sudo ruby setup.rb
    sudo ln -s /usr/bin/gem1.8 /usr/bin/gem

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

    sudo gedit /etc/bash_completion.d/gem1.8

    И вставить в начало этого файла, сразу после комментариев, следующий код:

    have()
    {
      unset -v have
      PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin type $1 &>/dev/null &&
      have="yes"
    }

    А в самый конец вставить:

    [ -n "${have:-}" ] && complete -F _gem18 $filenames gem

    Теперь вы в консоли сможете набирать gem i и консоль будет сама дополнять команду до gem install,

    Если же у вас уже была установлена более старая версия Rubygems, вы можете обновить её до текущей:

    sudo gem update --system

    Иногда, после обновления этой командой, gem может начать выдавать ошибку:

    /usr/bin/gem:23: uninitialized constant Gem::GemRunner (NameError)

    Для её устранения, необходимо отредактировать исполняемый файл (sudo gedit /usr/bin/gem) и перед строкой require "rubygems" вставить строку require "rubygems/gem_runner"

Установка Rails

Теперь, когда нас установлены актуальные версии интерпретатора и менеджера гемов, мы можем присутпить к установке самих Rails.

sudo gem install rails

Всё, рельсы установлены. Чтобы проверить, что всё в порядке, создадим приложение на рельсах:

cd ~
mkdir Sites
cd Sites
rails my_first_site
cd my_first_site
./script/server

Эти команды создадут в вашей домашней директории поддиректории Sites, а в ней, в директории my_first_site rails-приложение, после чего запустит стандартный сервер WEBrick, поставляемый вместе с интерпретатором Ruby. Если установка прошла без ошибок, то вы сможете увидеть приветствие рельсов, пройдя по ссылке http://127.0.0.1:3000/.

Установка дополнительных гемов

В дальнейшем, при работе с рельсами, вам может понадобиться множество различных гемов. Описывать установку всех я не буду. Опишу лишь то, с чем у меня когда-либо случались проблемы. Начнём, пожалуй, с гема rmagick, предназначенного для обработки изображений.

Если для вас не обязательно наличие самой последней версии этого гема, вы можете ограничиться командой

sudo apt-get install librmagick-ruby

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

sudo apt-get install libmagick9-dev
sudo gem install rmagick

Ещё лично я советую поставить вам несколько плагинов, которые облегчат вам жизнь при работе с Rails вдальнейшем. Установка одной командой:

sudo gem install mongrel BlueCloth RedCloth sqlite3-ruby ZenTest

И о каждом геме поподробнее:

  • mongrel — более быстрый, чем WEBrick сервер, написанный специально для работы с Rails. Если н установлен, то по команде ./script/server рельсы станут запускать именно его.
  • BlueCloth и RedCloth — библиотеки, используемые рельсовыми хелперами markdown и textilize соответственно для разметки текста.
  • sqlite3-ruby — библиотека для работы с базами sqlite3 (которые создаются по-умолчанию при создании рельсового приложения).
  • ZenTest — набор утилит для автоматического тестирования приложения. По команде autotest запускается тестирующий демон, который будет проверять все изменённые файлы, пробегая связанные с ними тесты. Об этой утилите я напишу позже

Неделя на Рельсах (выпуск от 10 сентября 2008 г.)

11.09.2008

Перевод. Оригинальная статья: This Week in Rails (September 10, 2008), за авторством Gregg Pollack

Добро пожаловать в пятый выпуск «Недели на рельсах», еженедельный отчёт о событиях в околорельсовом сообществе. Antonio Cangiano (автор идеи) был весьма занят, поэтому на этой неделе я решил его подменить.

Вы, скорее всего, уже слышали о выходе Rails 2.0.4 и Rails 2.1.1. Оба релиза — в основном исправляют ошибки, за подробностями отправляйтесь в списки изменений.

(далее…)