Как узнать, работает ли Spork - PullRequest
1 голос
/ 08 октября 2010

Я пытаюсь ускорить "rspecing" в приложении rails 2.3.8 со spork. Когда я запускаю spork в корне проекта, я получаю:

(...stuff...)
No server is running
Running specs locally:
Spork is ready and listening on 8989!

И затем, если я запускаю спецификации, появляется сообщение

 No server is running 
 Running specs locally 

, которое появляется, если я запускаю их без Spork, не появляется, однако запуск спецификаций происходит так же медленно, как и без Spork. Также в терминале Spork больше не выводится.

Мой вопрос: работает ли spork? Если да, работают ли спецификации там? И, наконец, если ответ на оба вопроса верен, как я могу ускорить мои тесты?

Вот соответствующие файлы конфигурации:

спецификация / spec.opts

  --colour
  --format progress
  --loadby mtime
  --reverse
  --drb

спецификация / spec.helper

require 'rubygems'
require 'bundler/setup'
require 'spork'


Spork.prefork do

   ENV["RAILS_ENV"] ||= 'test'
   require File.expand_path(File.join(File.dirname(__FILE__),'..','config','environment'))
   require 'spec/autorun'
   require 'spec/rails'

   Dir[File.expand_path(File.join(File.dirname(__FILE__),'support','**','*.rb'))].each {|f| require f}

   Spec::Runner.configure do |config|
  end


 end

 Spork.each_run do

end

И, чтобы задать полный вопрос, вот время, измеренное с помощью «времени»:

со Spork:

real    0m39.524s
user    0m5.012s
sys  0m0.912s

без Spork:

real    0m39.576s
user    0m18.537s
sys  0m2.400s

При занятии спортом - диагноз я получаю

 - Spork Diagnosis -
 -- Summary --
 config/boot.rb
 config/initializers/inflections.rb
 config/initializers/mime_types.rb
 config/initializers/new_rails_defaults.rb
 config/initializers/site_keys.rb
 config/preinitializer.rb
 spec/spec_helper.rb

А потом, для

 --- config/initializers/inflections.rb ---
 --- config/initializers/mime_types.rb ---
 --- config/initializers/new_rails_defaults.rb ---
 --- config/initializers/site_keys.rb ---

Следующая трассировка стека

 /var/lib/gems/1.8/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:147:in `load'
 /var/lib/gems/1.8/gems/rails-2.3.8/lib/initializer.rb:622:in `load_application_initializers'
 /var/lib/gems/1.8/gems/rails-2.3.8/lib/initializer.rb:621:in `each'
 /var/lib/gems/1.8/gems/rails-2.3.8/lib/initializer.rb:621:in `load_application_initializers'
 /var/lib/gems/1.8/gems/rails-2.3.8/lib/initializer.rb:176:in `process'
 /var/lib/gems/1.8/gems/rails-2.3.8/lib/initializer.rb:113:in `send'
 /var/lib/gems/1.8/gems/rails-2.3.8/lib/initializer.rb:113:in `run_without_spork'
 /var/lib/gems/1.8/gems/spork-0.8.4/lib/spork/app_framework/rails.rb:18:in `run'
 config/environment.rb:15
 spec/spec_helper.rb:14:in `require'
 spec/spec_helper.rb:14
 /var/lib/gems/1.8/gems/spork-0.8.4/bin/../lib/spork.rb:23:in `prefork'

спецификация / spec_helper.rb: 6

Ответы [ 3 ]

2 голосов
/ 15 декабря 2010

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

Вокруг строки 50 lib / tasks / rspec.rake вы найдете следующую строку.

spec_prereq = File.exist?(File.join(RAILS_ROOT, 'config', 'database.yml')) ? "db:test:prepare" : :noop

Это вызывает db: test: подготовиться к запуску перед вашими спецификациями, которые, в свою очередь, нагружают среду, разрушая всю цель spork.Я закомментировал эту строку и добавил следующее:

spec_prereq = :noop

Это изменение должно привести к небольшому улучшению.Вам нужно будет запустить db: test: prepare вручную после запуска db: migrate.У меня есть команда, которая выполняет оба действия.

Я не знаю, используете ли вы Bundler, но я увидел дополнительное увеличение скорости при обновлении до последней версии (1.0.7).(Bundler устанавливает пути загрузки при загрузке Rake в 2.3.x)

У меня все еще есть задержка ~ 2,5 с из-за накладных расходов spork, rake и bundler, которые, я надеюсь, могут быть улучшены в будущемвозможно, когда spork поддерживает рельсы 3.

1 голос
/ 08 октября 2010

Действия, необходимые для включения spork: -

  1. добавить --drb в spec / spec.opts, чтобы указать spec для использования drb для связи со spork.
  2. Bootstrap spork с использованием spork --bootstrap
  3. Измените spec / spec_helper.rb для настройки spork

Вы сделали все эти три шага?

Более подробная информация доступна здесь

0 голосов
/ 08 октября 2010

Ваша установка выглядит хорошо для меня.Нехватка вывода нормальная.

Вы пробовали spork --diagnose?Следует выложить список всех файлов spork preloads.

...