2011-12-17 2 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 restart 작업을 보여줍니다. –

답변

0

전체 레일 환경이로드되어야하므로, rake --tasks과 같은 간단한 레이크 작업도 오래 걸립니다. rails console 또는 script/console으로 콘솔을 열면 비슷한 시간이 걸립니다. Ruby 또는 Rails to speed up rake을 해킹하려고 시도 할 수 있지만 나중에 더 새로운 버전으로 전환하려는 경우 너무 많은 최적화가 잘못 될 수 있습니다. 레일 환경을로드해야하기 때문에 cleaning up routes도 도움이 될 수 있습니다.

4

처럼 spring

명령 줄 모양을보십시오 : 그것은 처음 실행 시간이 더 걸릴 것

spring rake -T 

하지만 후속 실행은 매우 빠른 것입니다.

3

이 솔루션은 나를 위해 일했습니다 : Faster rake tasks in Rails.

내가 lib/tasks/no_rails 디렉토리를 생성하고 레일스가 필요없는 모든 레이크 파일을 위의 방법으로로드 한 경우 약간의 변형을해야했습니다.

1

나는 Pratik이 그것을 필요로하는 작업을 위해 레일을 로딩하는 일반적인 경우에 대해 언급하고, 그렇지 않은 경우에는 미리 기억할 필요없이 레이크 작업에 대해 언급합니다.

레일이 필요없는 레이크 작업을 실행하기에 덜 침략적 인 방법은 -f 레이크 옵션을 사용하여 레이크에 특정 Rakefile을 사용하도록 지시하는 것입니다. 이렇게하면 레이크는 모든 레일에서 레이크 작업을 찾지 않습니다. 예를 들어

은, 위의 작업을 가정하는 것은 프로젝트의 최상위 수준에 Rakefile라는 파일에 당신의 Rakefile이 require File.expand_path('../config/application', __FILE__)처럼 레일로드 아무것도하지 않습니다, 당신은 할 수 있습니다 :

$ rake -f Rakefile spec 

및 그것은 당신의 spec 작업을 훨씬 빠르게 실행해야합니다. 시도해보십시오 $ time rake -f Rakefile -T; 난 내의 레일을 독립적 Rakefile으로 이런 짓을하고 있어요 :

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

단점이 레일에서 레이크 작업을 실행하려는 경우 당신이 그것을 지정하려면이 옵션마다 시간을 지정, 그리고 기억해야 할 것입니다 rake db:migrate입니다.

관련 문제