Rails on Windows is so slow (rails -v takes 4 seconds)

user331471 picture user331471 · Jan 7, 2011 · Viewed 11.3k times · Source

I'm using rails Version 3.0.3 and ruby Version 1.9.2p136 (2010-12-15) on a Intel Core 2 Duo 2,6 Ghz with 4 GB Ram and Windows Vista Business SP2 with no other (heavy) applications running. I have already read that rails development on Windows is slower than on Unices and most people do there for not recommend it but this is silly.

I can't think of any good reason for using 4 seconds to display a simple Version number. And rails generate needs up to 10 seconds to complete!

Something in my setup must be wrong (at least I hope).

Has someone a good idea how to proceed? Thanks in advance!

Answer

Luis Lavena picture Luis Lavena · Jan 8, 2011

There are a few key points that combined generate the slow performance you're noticing.

  • Ruby IO performance (on any version) is up to 3 times slower than Linux counterparts. This is because several unoptimized hops in the Windows codebase of Ruby. This requires further analysis, investigation and optimization not done until today.
  • Ruby 1.9.2 produces several stat() calls per file been required, which can increase the slowdown of Ruby itself. This is not present in Ruby 1.8.6 or 1.8.7. This is also solved in Ruby 1.9.3 (trunk) not released yet.
  • Projects like Rails requires around 500 files, which combined with above points make Ruby for Windows the snail lot of folks see.

Now, there are workaround to that, some simple and some complex ones.

  1. Move back to Ruby 1.8.7 instead of Ruby 1.9.2. That will bring again certain level of speed to your application. Unless you're taking advantage of Unicode support, then 1.8.7 could work for you.
  2. Look into tools like Spork to provide scenario/forking for your RSpec/Cucumber
  3. Move your development to RAM, using a RAMDisk like ImDisk. Move both Ruby and your application to it and time of loading will be reduced (this is associated with your available RAM too)

Hope some of these options help you.