2011-12-17 31 views
8

Komisyonun çalışması için 18 saniye sürüyor.Ruby/Rake görevini nasıl hızlandırabilirim?

$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 

Benim 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 

herhangi bir fikir Bu sonuç olarak, ben çalıştırmak için zamanın en azından bu miktarı alacak tanımlayan herhangi bir görev tüm görevleri yüklemek için gereken sadece zamanı komisyon neden çok zaman alıyor? Teşekkürler

+0

Boş bir Rakefile de oluyor mu? Seninkini gösterebilir misin? –

+0

Benim rakefile sadece rpec görevi içeriyor Mesajımı görebildiğiniz gibi – Laughingman

+0

Doğru Rakefile'a sahip olduğunuzdan emin misiniz? rake -T, Rakefile'nizde tanımlanmayan (veya dahil olmayan) bir Yolcu yeniden başlatma görevini gösterir. –

cevap

0

Tüm raylar ortamı yüklenmelidir, bu nedenle rake --tasks gibi basit tırmık görevleri bile biraz zaman alır. rails console veya script/console ile bir konsolun açılması benzer bir zaman alır. Ruby veya Rails to speed up rake'u hacklemeyi deneyebilirsiniz, ancak daha yeni bir sürüme geçmek istiyorsanız çok fazla optimizasyon kötü olabilir. Raylar ortamının yüklenmesi gerektiğinden, cleaning up routes da yardımcı olabilir.

4

gibi spring

Komut satırı bakacağız deneyin: İlk defa çalıştıran daha fazla zaman alacaktır

spring rake -T 

ama sonraki ishal çok hızlı olacaktır.

3

Bu çözüm benim için çalıştı: Faster rake tasks in Rails.

lib/tasks/no_rails dizinini oluşturduğum ve orada Raylar'a ihtiyaç duymayan tüm Rake dosyalarını koyup yalnızca yukarıdaki yöntemi kullanarak yüklediğim küçük bir değişiklik yapmam gerekiyordu.

1

Pratikte, yükleme raylarının genel durumu için ihtiyaç duyulan görevler için bahseder ve önceden hatırlamak zorunda kalmadan, herhangi bir tırmık görevi için olmayanlar için değil.

Raylara ihtiyaç duymayan bir sorgulama görevini yürütmek için daha az invaziv bir yöntem, belirli bir Rakefile kullanmak için rake söndürmek için -f tırmık seçeneğini kullanmaktır. Bu şekilde, tırmık tüm raylarda tırmık görevlerini aramayacak. Örneğin

, yukarıdaki görevi almasının projenizin en üst düzeyde Rakefile adlı bir dosyada olduğunu ve Rakefile require File.expand_path('../config/application', __FILE__) gibi Rayları yükleyen bir şey yapmaz, bunu yapabilirsiniz:

$ rake -f Rakefile spec 

ve spec görevini daha hızlı çalıştırmalıdır. $ time rake -f Rakefile -T'u deneyin; Ben benim bir raylar bağımsız Rakefile ile yaptı ve got:

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

olumsuz raylar bir tırmık görevi çalıştırmak istiyorsanız bunu belirtmek için bu seçeneği her zaman belirtin ve değil hatırlamak zorunda olduğunu rake db:migrate gibi.

İlgili konular