Сборка типового коробочного приложения на Rails с поддержкой cucumber features
Автор — Дмитрий Бараксанов, дата — 26.01.2010
Создавая любое веб-приложение всегда хочется чтобы оно не требовало особых зависимостей от системы. В случае разработки на rails чаще всего приложение зависит от множества чудесных gems, которые облегчают нам жизнь. Из опыта можно сказать что проблемы начинаются как только на одном сервере устанавливаются несколько приложений, которые требуют одинаковые gems разных версий (особенно если это rails gems).
Итак, если вы хотите иметь «коробочное» rails приложение, вот пошаговая инструкция по созданию такого приложения с поддержкой cucumber features (надеюсь что уже все понимают что разрабатывать без тестов нельзя).
1. Создаем приложение
rails --freeze <app_name>
Естественно, что для того чтобы создать приложение нам нужно иметь все rails gem’s.
2. Ставим cucumber
gem install cucumber
он ставит за собой еще несколько джемов.
Для новых версий cucumber (выше 0.4.5) нужно установить еще cucumber-rails gem:
gem install cucumber-rails
Создаем поддержку cucumber в приложении, для этого переходим в корень приложения и запускаем
script/generate cucumber --webrat
3. Вмораживаем gems в приложение
Для полного счастья пропишем зависимости для factory_girl и memory_test_fix в config/environments/cucumber.rb
config.gem "thoughtbot-factory_girl", :lib => "factory_girl", :source => "http://gems.github.com"
config.gem "lda-memory_test_fix", :lib => "memory_test_fix", :source => "http://gems.github.com"
Теперь вмораживаем все gems в приложение
rake gems:unpack RAILS_ENV=cucumber
rake gems:unpack:dependencies RAILS_ENV=cucumber
rake gems:build RAILS_ENV=cucumber
4. Запускаем cucumber features
Сначала создаем пустую схему базы данных
rake db:migrate
Запускает cucumber features
rake features
Если работает, то у нас почти все получилось и мы близки к финалу.
5. Проверка зависимостей
На всякий случай проверяем что все необходимые gems вморожены
rake gems RAILS_ENV=cucumber
И если у каждого gem написано «F», то все хорошо, если нет, то в config/environments/cucumber.rb добавляем зависимости для cucumber gem и пробуем заново вмораживать gems вместе с зависимостями.
6. Избавляемся от системных gems
Теперь удаляем все установленные gems (мы их специально ставили в домашнюю папку, если там есть что-то нужное тогда с удалением будьте повнимательнее)
rm -rf ~/.gem
И наконец, немного магии, немного подправим vendor/gems/cucumber/bin/cucumber, добавив туда пару строчек
#!/usr/bin/env ruby
RAILS_ENV='cucumber'
require 'config/boot'
И еще раз проверяем что выполняются cucumber features
rake features
Работает? Ура!
Метки: cucumber, linux, Ruby on rails
В разделах: Ruby on rails, Заметки на коленках




Так трабл получается с языком
Как вариант прямо в файле сценария указать вверху
language: ru
да, в новом огурце надо указать в feature файле язык. простой способ сделать это -
find features -type f | xargs sed -i ’1i # language: ru’