Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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!

like image 612
user331471 Avatar asked Jan 07 '11 16:01

user331471


2 Answers

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.

like image 134
Luis Lavena Avatar answered Nov 05 '22 15:11

Luis Lavena


It is faster to use Ruby inside an Ubuntu Virtual Machine than using it directly with Windows.

A good option is to use Vagrant: You develop on your Windows IDE, and files are "shared" with the Ubuntu VM, you run "vagrant ssh", then run "rails server", or any other command you'd like to run. There are other benefits as well:

  • Your don't need to install RVM, or switch ruby versions, just use a VM for each project. VMs can be small, like 500MB of data, using up to 100MB of RAM, but YMMV
  • You don't need to worry about gem's compatibility with Windows

Take a look: http://www.vagrantup.com/

like image 27
carlosvini Avatar answered Nov 05 '22 13:11

carlosvini