From: Rich Date: 2007-08-16T22:00:03+09:00 Subject: Re: Why is rake really slow? On Aug 15, 11:50 pm, hemant wrote: > On 8/16/07, Rich wrote: > > > > > On Aug 15, 12:41 am, richpoir...@gmail.com wrote: > > > On Aug 14, 6:40 pm, Jim Weirich wrote: > > > > > unknown wrote: > > > > > Israkesupposed to be reallyslow? > > > > > > I'm using InstantRails and runningrakein a project with one unit > > > > > test and two functional tests and it takes 33 seconds total. Is that > > > > > normal? It seems reallyslowto me. > > > > > > When I turn on trace I can see that it spends most of its time in > > > > > "Execute environment" and loading the test files: > > > > > > C:/InstantRails/ruby/bin/ruby -Ilib;test "C:/InstantRails/ruby/lib/ > > > > > ruby/gems/1.8/gems/rake-0.7.2/lib/rake/rake_test_loader.rb" "test/unit/ > > > > > user_test.rb" > > > > > > Anyone else have this problem or is it normal? Thanks. > > > > > Rakein and of itself is quite fast. There are two types of things that > > > > canslowyou down. > > > > > (1) Executing the Rakefile. If you have lots of tasks or complex > > > > dependencies, then whatever time it takes to resolve those can build up > > > > andslowdown everyrakecommand. > > > > > (2)Slowtasks. Some tasks inrakeare naturelyslow. Slowtakes make > > > > anything that depends upon themslowas well. > > > > > I assume you are working in Rails? Add this to your top level Rakefile: > > > > > task :noop > > > > > Then time the "rakenoop" command. This will be the time it takesrake > > > > to run essentially a do nothing task and will give you a sense of the > > > > general Rakefile overhead. > > > > > Then time "rakeenvironment". This task loads the rails environment and > > > > can take some time. The environment task is a dependency of most rails > > > > relatedraketasks in a Rails project. > > > > > In the project I'm currently working on, "rakenoop" takes under a > > > > second. "rakeenvironment" takes nearly 3 seconds. ("rakenoop" in a > > > > lightweight non-rails project takes under 0.2 seconds). > > > > > It sounds like the environment task on your system is painfullyslow. > > > > Is it doing anything unusual? > > > > > -- Jim Weirich > > > > > -- > > > > Posted viahttp://www.ruby-forum.com/. > > > > Thanks for the replies. Yes I'm working with rails. I think you are > > > both right. Running a single unit test withoutraketakes about 11 > > > seconds (even though it says it finished in 0.118 seconds). The test > > > simply creates a new user in my User model. So maybe it's taking a > > > while to connect to my mysql db? I'll have to investigate that (not > > > sure how to though).rakeenvironment takes about 13 seconds. Where is > > > the environment task defined? I'd like to take a look at it to see > > > what it's doing. Usingraketo run that one unit test takes 24 > > > seconds, so it's definitely a combination of the environment task > > > being painfullyslowand the test itself beingslowtoo. > > > > Thanks again for the help Jim and Ryan. > > > Ok I've narrowed down the environment part of the problem. What's > > taking long is the require_frameworks method in rails' Initializer. > > The active_record, action_controller and action_web_services > > frameworks take a while (a few seconds each) to load. So now the > > question is why? I'm not sure where to look to dig deeper into this, > > i.e., see what the require method is actually doing. Any ideas? > > > I still have to look into why the test itself isslowtoo. > > Its normally a good idea to take out actual db connections when > running tests. Did you look into mocha or something? I'm running rails tests though. Don't most rails tests require a db connection?