2011-12-17 16 views
8

rake --tasksを実行するには約18秒かかります。これは結果として、私が定義する任意のタスクを実行するための時間の少なくともこの量がかかります、それは、すべてのタスクをロードするのにかかる時間だけである:Ruby/Rakeタスクを高速化するには

$time rake --tasks 
rake db:clean   # Cleaning up database 
rake passenger:restart # Restart Application 
rake spec    # Run specs 

real 0m18.816s 
user 0m7.306s 
sys 0m5.665s 

私のRakefile:

$: << "." 
require "rubygems" 
require "rspec/core/rake_task" 

desc "Run those specs" 
task :spec do 
    RSpec::Core::RakeTask.new(:spec) do |t| 
    t.rspec_opts = %w{--colour --format progress} 
    t.pattern = 'spec/*_spec.rb' 
    end 
end 

task :default => :spec 

任意のアイデアなぜレーキが多くの時間を要するのか? ありがとう

+0

空のRakefileでも起こりますか?あなたはあなたを見せてもらえますか? –

+0

私のrakefileは私のポストで見ることができるようにrpecタスクしか含んでいません – Laughingman

+0

あなたは正しいRakefileを持っていますか? 'rake -T'はRakefileに定義されていない(または含まれていない)Passengerの再起動タスクを表示しています。 –

答えて

0

レール環境全体をロードする必要があるため、rake --tasksのような単純なレーキタスクでも時間がかかります。 rails consoleまたはscript/consoleのコンソールを開く場合も、同様の時間がかかります。あなたはRubyやRails to speed up rakeをハックしようとするかもしれませんが、後で新しいバージョンに切り替えるにはあまりにも多くの最適化が悪いことがあります。レール環境をロードする必要があるため、cleaning up routesも役立ちます。それは最初の時間を実行しているより多くの時間がかかりますが、その後の実行は非常に高速になります

spring rake -T 

4

spring

コマンドラインは次のようになります試してみてください。

3

この解決策は私のために働いた:Faster rake tasks in Rails

lib/tasks/no_railsディレクトリを作成し、そこにRailsを必要としないすべてのRakeファイルを置き、上記の方法を使用したものだけをロードしなければなりませんでした。

1

私は、事前に覚えておくことなしに、レーキタスクを必要としないタスクではなく、そうでないタスクではレールをロードする一般的なケースについて、Pratikが言及したソリューションを気に入っています。

レールを必要としないレーキタスクを実行するための侵襲性の低い方法は、-fレーキオプションを使用して、特定のRakefileを使用するようにrakeに指示することです。この方法では、レーキはすべてのレールでレーキタスクを探すことはありません。

例えば、上記のタスクを仮定すると、プロジェクトの最上位レベルにRakefileと呼ばれるファイルであり、あなたのRakefileがrequire File.expand_path('../config/application', __FILE__)のようなレールをロードする何もしない、あなたが行うことができます:

$ rake -f Rakefile spec 

とそれははるかに速くあなたの仕様タスクを実行する必要があります。試してみてください$ time rake -f Rakefile -T;私は私のレールに依存しRakefileでこれを行なったし、得た:

real 0m1.543s 
user 0m1.308s 
sys  0m0.201s 

欠点あなたがレールからrakeタスクを実行したい場合は、それを指定するには、このオプションを毎回指定し、しないように覚えておく必要がありますrake db:migrateのように。