1

Rails2.3.8アプリでsporkを使用して「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 / spec.opts

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

spec / 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

スポークなし:

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

スポーツをしているとき--diagnoseIget

 - 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 / spec_helper.rb:6

4

3 に答える 3

2

私は同じ問題に遭遇しました、そしてこれは私が理解することができたものです。

lib / tasks / rspec.rakeの50行目あたりに、次の行があります。

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

これにより、db:test:prepareが仕様の前に実行され、環境が読み込まれ、sporkの目的全体が無効になります。この行をコメントアウトし、その下に次の行を追加しました。

spec_prereq = :noop

この変更により、かなりの改善が見込まれます。db:migrateを実行した後、db:test:prepareを手動で実行する必要があります。両方を行うコマンドがあります。

Bundlerを使用しているかどうかはわかりませんが、最新(1.0.7)にアップグレードすることで速度がさらに向上しました。(Rakeが2.3.xにロードされると、Bundlerはロードパスを設定します)

スポーク、レーキ、バンドラーのオーバーヘッドが原因で、まだ約2.5秒の遅延があります。これは、将来、おそらくスポークがレール3をサポートするときに改善されることを願っています。

于 2010-12-14T22:47:13.877 に答える
1

スポークを有効にするために必要なアクションは次のとおりです:-

  1. --drbspec / spec.optsに追加して、drbを使用してsporkと通信するようにspecに指示します。
  2. を使用したブートストラップスポークspork --bootstrap
  3. spec/spec_helper.rbを変更してsporkを設定します

これらの3つのステップをすべて実行しましたか?

詳細については、こちらをご覧ください

于 2010-10-08T15:26:31.413 に答える
0

あなたのセットアップは私には良さそうです。出力の欠如は正常です。

やってみましたspork --diagnoseか?sporkがプリロードするすべてのファイルのリストを吐き出す必要があります。

于 2010-10-08T18:20:06.303 に答える