Life Of Navin

Random Musings, Random Bullshit.


RoR On Windows With XAMPP!

Ruby is an Object-Oriented language that was born in the mid-90's, but gained popularity in the early 2000's. As the creator of the language Matz puts it: "Ruby is about making coding natural, not simple". And once you get used to it, Ruby really begins to feel natural!

One reason for Ruby's popularity is undoubtedly Ruby on Rails aka RoR, an open source Web Development framework for Ruby. The power of RoR lies in it's simplicity and speed of development! Many popular websites like Twitter, Hulu, Scribd, and Github make use of RoR (see this).

One must note that Ruby != RoR. They're totally different!

Hopefully, this short intro has gotten you interested in Ruby and RoR. So let's see how to setup Ruby and RoR on Windows systems! Why Windows? Because the install procedure for Windows is a bit of a pain in the a** compared to the install procedure in Linux. For this article, I'll be using a system running Windows 7.

Anyway, here's what you need:
  • The latest version of Ruby Installer (Get it from here)
  • The latest version of XAMPP (Get it from here)
Ruby Installer is a compact package containing the entire Ruby setup and all it's dependencies. Another thing included in Ruby Installer is Ruby Gems, which is a package manager. (At it's simplest, Ruby Gems is like the Add/Remove programs feature in Windows.... except that it deals only with Ruby components/modules (which are called gems) ).

So let's get started shall we?
  1. Double Click on the Ruby Installer executable and install Ruby into C:\Ruby

  2. Double Click on the XAMPP executable and install XAMPP in C:\xampp
  3. Go to My Computer-> System Properties->Advanced System Settings

  4. Choose the Advanced tab and then click on Environment Variables

  5. Check if C:\Ruby\bin is present in the Path row. If not present, select the Path row, click edit, and add C:\Ruby\bin; at the start.

  6. Open a Command Prompt and do the following:

    C:\>ruby -v
    ruby 1.8.

    C:\>gem -v

  7. If you get this output (or something similar depending on the version of Ruby and RubyGem installed), you have Ruby and RubyGems installed successfully! So How about we get on the rails now, and install RoR?

    C:\>gem install rails --include-dependencies
    INFO: `gem install -y` is now default and will be removed
    INFO: use --ignore-dependencies to install only the gems you list
    Successfully installed rails-3.0.0
    1 gem installed
    Installing ri documentation for rails-3.0.0...
  8. Let us check if Rails is installed or not:

    C:\>gem list

    *** LOCAL GEMS ***

    abstract (1.0.0)
    actionmailer (3.0.0)
    actionpack (3.0.0)
    activemodel (3.0.0)
    activerecord (3.0.0)
    activeresource (3.0.0)
    activesupport (3.0.0)
    arel (1.0.1)
    builder (2.1.2)
    bundler (1.0.2)
    erubis (2.6.6)
    i18n (0.4.1)
    mail (2.2.7)
    mime-types (1.16)
    polyglot (0.3.1)
    rack (1.2.1)
    rack-mount (0.6.13)
    rack-test (0.5.6)
    rails (3.0.0)
    railties (3.0.0)
    rake (0.8.7)
    thor (0.14.3)
    treetop (1.4.8)
    tzinfo (0.3.23)

  9. Yeah! So we're all set with RoR! Now let's get XAMPP configured shall we? Go to C:\xampp\htdocs and create a new folder where your RoR project will reside. Let's name this folder Ruby.
  10. Now go to C:\xampp\apache\conf and open the file named httpd.conf with a text editor (I use Notepad++) and add the following right at the end of the file:

    Listen 3000
    LoadModule rewrite_module modules
    <virtualHost *:3000>
    ServerName rails
    DocumentRoot "c:/xampp/htdocs/ruby/public"
    <Directory "c:/xampp/htdocs/ruby/public/"

    Options ExecCGI FollowSymLinks
    Allow from all
    Order allow,deny
    AddHandler cgi-script .cgi
    AddHandler fastcgi
    -script .fcgi


    Note the DocumentRoot and Directory line.... they must have the correct path of the folder that you created.
  11. Now we shall see the power of RoR. Go to the Command Prompt and type in:

    C:\Ruby\bin>rails new C:/xampp/htdocs/ruby -d mysql
    create README
    create Rakefile
    create .gitignore
    create Gemfile
    create app
    create app/controllers/application_controller.rb
    create app/helpers/application_helper.rb
    create app/views/layouts/application.html.erb
    create app/mailers
    create app/models
    create config
    create config/routes.rb
    create config/application.rb
    create config/environment.rb
    create config/environments
    create config/environments/development.rb
    create config/environments/production.rb
    create config/environments/test.rb
    create config/initializers
    create config/initializers/backtrace_silencers.rb
    create config/initializers/inflections.rb
    create config/initializers/mime_types.rb
    create config/initializers/secret_token.rb
    create config/initializers/session_store.rb
    create config/locales
    create config/locales/en.yml
    create config/boot.rb
    create config/database.yml
    create db
    create db/seeds.rb
    create doc
    create doc/README_FOR_APP
    create lib
    create lib/tasks
    create lib/tasks/.gitkeep
    create log
    create log/server.log
    create log/production.log
    create log/development.log
    create log/test.log
    create public
    create public/404.html
    create public/422.html
    create public/500.html
    create public/favicon.ico
    create public/index.html
    create public/robots.txt
    create public/images
    create public/images/rails.png
    create public/stylesheets
    create public/stylesheets/.gitkeep
    create public/javascripts
    create public/javascripts/application.js
    create public/javascripts/controls.js
    create public/javascripts/dragdrop.js
    create public/javascripts/effects.js
    create public/javascripts/prototype.js
    create public/javascripts/rails.js
    create script
    create script/rails
    create test
    create test/performance/browsing_test.rb
    create test/test_helper.rb
    create test/fixtures
    create test/functional
    create test/integration
    create test/unit
    create tmp
    create tmp/sessions
    create tmp/sockets
    create tmp/cache
    create tmp/pids
    create vendor/plugins
    create vendor/plugins/.gitkeep

    If you now go to C:\xampp\htdocs\ruby, you should see something like this:

    These are all the files created automagically by RoR! Nice, ain't it?
  12. Start XAMPP and start the MySQL and Apache services:

  13. Open a browser (Read: Firefox! :) ) and type in http://localhost:3000 ... and you should see this page:

  14. That's it... you're now officially on the Rails! So now it's time to start developing you web apps with RoR!
  • Gems are, in my opinion, the most powerful feature of Ruby. Gems are like modules that can easily be used in any project. I'd urge you to head over to this site, which holds over 16500 Ruby gems. Installing any gem is the same procedure as Step 7. Just type in gem install [gemname] to download and install the gem. You will probably need gems like mysql (gem install mysql), sinatra (gem install sinatra) etc. for web app development.
  • Yes, I know this is NOT the only way to install RoR. But I use XAMPP for almost everything so have included it here as well! This procedure should ideally work with WampServer as well, as long as the paths are corrected.
  • By default, RoR assumes that your MySQL root password is absent. However if you have assigned a root password, you must change the database.yml file present in C:\xampp\htdocs\Ruby\config.yml . Also, RoR recommends the creation of 3 databases: One each for testing, development and production. By convention they are named as [projectname]_test,[projectname]_production and [projectname]_production. You will have to create these databases externally through MySQL or using rake db:migrate. If you prefer to use alternative names, simply modify the config.yml file with names of your choice!
  • RoR on Windows really is a bit of a pain, and may not even work the first time! Honestly, I believe any serious developer must be comfortable working in Linux, which is more suited to the need! RoR on Linux is a breeze and works great (if not better)!
So far, I'm having an awesome time on Rails and am looking forward to working more in RoR! Hope you too enjoy the trip on rails! :)

Site Design Memoirs: GEC Tandav!!

On the 1st and 2nd of October, we held our annual intra-college event Tandav, and being a Comp. Science student, I agreed to design the Tandav site, currently online at

The site, as with most of my recent web-dev projects, made use of Joomla, the super-awesome Open Source CMS. Less than a year ago, I had a hard time choosing between Joomla and Drupal, another open source CMS, but now I've totally become a Joomla fanboy! :)

Within minutes (literally), the basic framework for the site was set! Most of the site was meant to be static, and hence didn't really take much time to set up! Tandav is supposed to be a dark, fiery event, and as such the black-red colour scheme was a really simple decision.

After rounding up some pictures from DeviantArt and, and a little lameass photo-editing, the site header was ready. Some even more lameass photo-editing later, a set of 16 'Tandav Wallpapers' were ready! Credit for these also goes to Nikks, who created some of the less lameass walls! :)

An important part of the Tandav site each year is the 'Heartbeats' section, which while actually intended to be a place for people to declare their love for one another, always ends up as the online battleground for the six branches participating in Tandav to showcase their aggression (read: swear at each other). For the site, I used a modified version of the Phoca Guestbook component, modifying the Guestbook into a To-From-Message script. Hats off to the makers of the component for packing in so many features including a built-in CAPTCHA system (that too with different types of CAPTCHAs), which made my job really easy.

I got a few friends to test the site before I took it online, and thankfully everything worked perfectly!

Moderation of the 'Heartbeats', which, as expected, turned rapidly into 'Hatebeats', was a breeze, and despite loads of them being overtly vulgar/crude (yeah, even by my low standards!), moderation didn't take more than 10-15 minutes each night!

The site received loads of praise, both online and offline, and thankfully never went down! :)

Easter Eggs:
Being a hobby project, I took the liberty of adding some fun easter eggs and customisations into the Tandav site:

1) 404 Page (Click Here To See)
I don't really think anyone noticed this (thankfully), but the Tandav site had a custom 404 page!

Super Mario Bros. was a huge part of my childhood, and (according to my mom) the reason for interest in electrical gadgets that I have, and this was a small way of me showing the same! Also, more recently, Nikks talking constantly talking about playing Mario retro-style had implanted the Super Mario idea in my head! :)

2) The Sambhavi Shambavi Shambhavi conundrum
Last year, on the Tandav site, a bunch of jerks took the liberty of using the anonymity (?) provided by the site to repeatedly insult Shambhavi, who happens to be a good friend of mine, with extremely vulgar (yes, again, by my low standards) comments. And so she'd asked me to set up a 'Shambhavi' filter, which would filter out her name. And I did just that! On the Tandav site, anytime someone used the string 'shambhavi', '***' showed up instead of her name! :)

It was pretty funny once people realised such a filter had been set up, and then tried to circumvent it using alternative strings like 'sambhaavee'! :P

Thankfully though, the filter didn't have much use, as she was spared the online insults this time around!

3) The Konami Code
Like I've said before, have been thinking a lot about retro-gaming recently, and something that had always inspired me was The Konami Code, and after seeing a whole bunch of sites at KonamiCodeSites , I was convinced I needed to do something similar on the Tandav site. An hour or so of tweaking later, it was all ready to go!

Now if you go to the Tandav site and go up-up-down-down-left-right-left-right-b-a, and wait for ~5 seconds, you should be seeing the entire source code of the page. Super cool, and uber-geeky= iLike! :)

There are some really awesome sites listed on KonamiCodeSites. Do check them out!

Overall, I had a lot of fun designing and maintaining the site, and strongly recommend my juniors to take it up as a mini-project next time around! Trust me, you'll learn more about Web tech in a few short weeks than you will in an entire semester of Web Tech classes! :)



Finally after all these years, here's to the beginning of what was there, what is there and hopefully what will remain!! So here are my thoughts & words -Online!!