Как оптимизировать время загрузки Rails / Rspec на Windows до порядка секунд? (со спорком или без) - PullRequest
2 голосов
/ 18 января 2012

Справочная информация:

Я использую пакет RailsInstaller 2 от Engine Yard, что означает Ruby 1.9.2-p290 и Rails 3.1.1, на Windows 7 x64.

Проблема:

При попытке Ruby on Rails Tutorial и после того, как автотест и spork заработали, как предполагалось, ясно, что rspec сообщила, что тесты закончились через несколько секунд, фактическое время, затрачиваемое намного больше это и ближе к полминуты, далеко от ответа доли секунды, наблюдаемого в скринкастах. Я знаю, что большая часть этого может быть отнесена к времени загрузки Rails (также видно из количества времени, которое spork проводит на этапе предварительной загрузки), и как JRuby медленнее (по сравнению с Ruby в linux), но 15 + с на rspec пробег в среднем (со спорком или без, учитывая время загрузки) для TDD совершенно неприемлем. Существуют ли другие способы уменьшить его до порядка за несколько секунд , если не считать перехода на Linux?

Редактировать: что-то не так с тем, как я сформулировал этот вопрос?

Ответы [ 3 ]

1 голос
/ 20 июля 2012

Время загрузки Rails довольно велико. Как вы упомянули, это может быть убийцей TDD.

Существует несколько подходов к решению проблемы:

  1. Используйте Guard, чтобы уведомлять о событиях fs и вызывать разветвляющиеся рельсы с помощью spork, а также вызывать тесты rspec, запускаемые при изменении файла спецификации или файла SUT (тестируемого объекта).
  2. Переместить логику за пределы зависимых от рельсов классов (контроллеров, моделей активных записей) и использовать вместо этого простой объект ruby.

Я использую оба подхода. Второй подход имеет много преимуществ:

  • Вы можете тестировать свои классы изолированно без зависимости от rails
  • Тесты будут выполняться очень быстро, так как вы не загружаете рельсы, только определенные необходимые классы
  • Это ведет вас к SRP (принципу единой ответственности), где каждый класс / модуль имеет небольшую часть всей системы
  • Это поощряет СУХОЙ (не повторяйте себя) - когда у вас есть крошечные кусочки, их легче использовать.
  • Вы используете DI (Dependency Injection) для предоставления контекста вашим маленьким объектам, что облегчает их тестирование и повторное использование.

Обязательно смотреть:

0 голосов
/ 31 декабря 2012

Недавно я предложил решение, которое я не видел в других местах:

Я запускаю Ubuntu в VirtualBox, и каталог моего проекта настроен как общая папка.Это означает, что окно Ubuntu всегда видит последнюю версию моего кода, поэтому я могу наслаждаться временем CLI в Linux и по-прежнему сохранять Windows своей платформой разработки.Я пользуюсь этой установкой всего около недели, но пока не столкнулся с какими-либо недостатками.

0 голосов
/ 18 февраля 2012

Это, наверное, лучший на данный момент.Идентичная настройка в Windows переводится в считанные секунды в Linux.Я не тестировал Ruby 1.9.3, но вряд ли это существенно изменит ситуацию.

...