2010-10-08 80 views
1

我正在加速spork 2.3.7應用程序中的「rspecing」。當我在項目的根目錄運行叉勺,我得到:如何知道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實際運行?如果是這樣,規格是否在那裏運行?最後,如果兩者的答案都是真的,我該如何加速測試?

以下是涉及到的配置文件:

規格/ 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 

而且,有一個完整的問題,這裏有用'時間'測量的時間:

With Spork:

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

沒有叉勺:

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

當運行運動--diagnose我得到

- 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

+0

就像童謠說:「...和spork逃跑了foon。」 '' – ewall 2010-10-08 19:42:53

+0

'ps -ex | grep spork' – 2011-06-22 18:05:09

回答

2

我遇到了同樣的問題,這就是我能夠弄清楚的。

在第50行的lib/tasks/rspec.rake中,您會找到以下行。

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

這導致分貝:測試:準備讓你的規格,這反過來又加載環境之前運行,擊敗叉勺的整個目的。我註釋掉了這一行,並在其下面添加了以下內容。

spec_prereq = :noop 

這種改變應該會導致相當多的改進。在運行db:migrate後,您將不得不運行db:test:prepare。我有一個兩個都有的命令。

我不知道你是否在使用Bundler,但通過升級到最新版本(1.0.7)我看到額外的速度提升。 (Bundler在2.3.x加載Rake時設置了加載路徑)

我還有一個2.5秒的延遲,這是spork,rake和bundler的開銷造成的,我希望將來可以改進它,也許當spork支持導軌3.

+0

好的,會嘗試回報,只有一個問題:如果在spork啓動時完成,這不會工作嗎? – diegogs 2010-12-15 11:07:27

+0

我終於可以試試它,並確認你是對的,現在我要考慮做db:test:準備spork加載:) – diegogs 2010-12-17 16:38:38

1

,使叉勺需要採取的措施如下: -

  1. 添加​​符合規範/ spec.opts告訴規範中使用DRB與叉勺溝通。使用spork --bootstrap
  2. 修改規格/ spec_helper.rb設置叉勺

  • 引導叉勺:你做完所有的這三個步驟?

    更多信息,請here

  • +0

    是的,我已經用這些文件的內容更新了問題 – diegogs 2010-10-08 16:06:56

    0

    你的設置對我來說很好。缺乏產出是正常的。

    你試過spork --diagnose?它應該吐出所有文件spork預加載的列表。

    +0

    將在星期一嘗試並報告任何發現:) – diegogs 2010-10-09 08:15:52

    +0

    已更新問題 – diegogs 2010-10-11 07:29:17

    +0

    要確認,您會收到沒有spork的「No server is running」並且在spork *運行時沒有消息,是正確的? – zetetic 2010-10-11 18:54:48

    相關問題