Mitchell Craig; Tam Nguyen; Becker Luu; Eliezer Mar Manarang; and Colin Williams University of Calgary SENG 403 Dr. Kremer

Abstract—The proceeding document describes the Ruby on web applications. Thousands of web applications around the Rails framework. A history is provided, along world have been developed using Ruby on Rails with some with the founding Philosophies and Priciples, Technical Infor- notable examples such as Twitter, Yellow Pages, Github and mation, Notable Applications and a comparison to competitors. A short tutorial is provided as an example. Hulu. Today, the Rails framework is supported by the Rails core team consisting of a dozen members who have been given the keys to the source repository as well as more I.INTRODUCTION than 2,100 contributors to the project. The framework is Ruby on Rails [1] (often referred to as Rails or RoR) supported by a vibrant ecosystem which includes various is an open source web application development framework choices in hosting, tools, editors, conferences, workshops that is written in the Ruby [2] programming language. The and consultants. Ruby on Rails framework is designed to make programming web applications easier by making assumptions on what the III.PHILOSOPHIESAND PRINCIPLES developer requires to get started on their applications. Ruby There are three primary philosophies or principles[4] be- on Rails is a development tool which assists developers in hind Ruby on Rails: Convention over Configuration (CoC), building websites and applications because it abstracts and Dont Repeat Yourself (DRY) and Representational State simplifies the commonly used and repetitive tasks. What this Transfer (REST). means is that the only have to write new code The first key principle is Convention over Configuration. in areas where their application differs from the standard The Rails framework is designed with conventions that tell conventions. Using Ruby on Rails, the programmers are able you how you should structure your code, how to name your to write less code while producing more output than with classes and files and how to organize your databases and other development frameworks. Highlighted in this report tables. The framework makes large assumptions about what is an overview of the philosophies and principles behind you want to do and how you want to do it so that you dont Ruby on Rails, an in-depth look at the technical aspects need to explicitly specify it. The benefit of having these of the framework as well as comparisons to other similar conventions is that it simplifies and reduces the amount technologies. Finally, the report includes a tutorial on getting of code that you actually need to write when developing setup with the Ruby on Rails framework and getting started your web application. What this means when developing is with developing a simple web application. that only the unconventional aspects of the program need to be written. This allows for better productivity and high II.HISTORY OF RUBYON RAILS efficiency since the repetitive or common tasks are already Ruby on Rails was created in 2003 by David Heinemeier automatically completed for you. Of course, there is the Hansson. Hansson developed the original framework for option to ignore these conventions and structure the code to Rails while he was working on Ruby-based projects for your own preferences but this means that more unnecessary 37signals[3], a web application company. Rails was ex- work is being done. This principle makes Ruby on Rails a tracted from some of Hanssons work on Basecamp, a project bit of an opinionated framework[5] and is largely a reason management tool developed by 37signals. why the framework is named Ruby on Rails. If you decide to Rails was first released publicly released in July 2004 as follow the conventions that have been set out, you will enjoy an open source project. The project had reached a milestone the benefits of using Rails for developing your applications. in 2006 when Apple announced that Ruby on Rails would If you dont conform to the style that the framework was be bundled together with Mac OS X v10.5 Leopard which built on, it may not work well for you. later released in 2007. The second key principle is DRY which stands for Dont The Rails framework is based on established principles Repeat Yourself. This principle suggests that writing the that had been proven successful elsewhere and is focused on same code over and over again is a bad thing. The main practicality which is the reason behind why it has become idea behind the DRY principle is that it promotes the reuse so successful. With the release of Ruby on Rails, Ruby has of code as often as possible rather than duplicating and risen to become a prominent alternative for other classic rewriting similar code in multiple places. Ruby on Rails languages such as PHP and Java for developing websites and follows the DRY principle to help in maintaining clean code and reducing the chance of errors in the code. Having DRY reliable code. Less work and code is required from the code in your program means that changes only need to be developers which results in higher productivity. made at one location rather having to revise changes in all different locations. If an error were to occur, it would be IV. TECHNICAL INFORMATION a lot more traceable and easier to detect the root cause of This section describes Ruby on Rails[7] basic technical the error. Rails is designed with and provides libraries that information: the structure on how it works, classes that are assist in writing DRY code. needed for development, and the framework that it supplies The last principle of Ruby on Rails is REST or Repre- aiding the web application development. Also, some tools sentational State Transfer[6]. This is not one of the primary for deployment of the application is tackled briefly. The in- philosophies of Ruby on Rails but in recent years, the formation stated here are mainly learned/cited from sources Rails community has moved towards following the RESTful [8], [9], and [10] for the system architecture/information and architecture. Unlike the other philosophies of Rails, it is not development tools, and [11] contains the recommended tools a requirement for the application to follow a REST design. for deployment. It is encouraged that developers follow the REST design and the framework provides tools that make it easier to do so. A. Introduction REST is a pattern for making web applications which Ruby on Rails is a development framework for developing organizes the application around resources and standard a web application. Rails offers libraries for development HTTP verbs. With REST, there are three key ideas. The ranging from the user interface up to managing the data and first is proper identification of resources, the second is the processing it. This is why Rails is called a full-stack web manipulation of the resources and the last is to have self- application development framework - usable to create all descriptive messages that are easy to interpret. Resources functionality of a working web application.The availability are often the core model objects in the program. The main of the different libraries and given the founding philosophies idea behind the RESTful design is to identify and manipulate of Rails, which is the basis of a Rails project default con- resources using a standard convention that is self-descriptive. figuration, are giving Rails the ability to automatically link As an example, the following HTTP request, DELETE different aspects and classes of a created project resulting /photos/17 can be easily understood as referencing a photo for the developers ease of use of the system. Though the resource with an ID number of 17. The standard HTTP drawback of following a default configuration for the Rails verb being used in this case is the delete functionality. The framework is that it offers little flexibility on configuration purpose behind using REST in Ruby on Rails is to provide management and design for the developer. The basic features a simplified design pattern that is clear and straightforward. that Ruby on Rails provides for the application development This can be especially helpful if the application being are: [10] developed is an open source project. Following a common pattern like REST for all applications using Rails means that • HTML [12] templating (which involves the view com- all developers will have a good understanding of the coding ponent of the application). style and practices. • Database storage/retrieval (involves the model classes The philosophies and principles of Ruby on Rails are very in the application). closely related within the framework. They all aim towards • User Web browser requests and response (involves the simplifying and making the process of developing web appli- controller classes in the application). cations as simple as possible. Convention over Configuration • HTML form handling. focuses on making the development process straightforward B. Directory Structure and increasing productivity by abstracting the common and repetitive tasks so that the developer only needs to be focus When creating a project on Rails, Rails creates a prede- on the new aspects to be implemented rather than having to fined directory structure to contain the files needed for the worry about the unnecessary conventional aspects. The DRY project to work. Below are the directory names that could philosophy focuses on having to write code only once and be seen in a Rails project, and a brief description of each: reusing it as much possible when that particular functionality [10] is needed. Once again, this increases productivity since it app reduces the amount of code that needs to be written. It The folder that contains all developed code for the also helps because it allows for better traceability of the project that are related to the MVC [13] architec- code which makes it easier to make revisions. Following ture. It means that it contains the model classes, the RESTful design, the design of code follows a certain the controller classes, and the view templates for standard which all developers can interpret and understand. the application. When Ruby on Rails is used with these principles and config philosophies in mind, the result is having cleaner and more Contains the configuration files for the application. db It contains the database schema and migration files for model classes and database entities. Even though that Rails is a full-stack framework for web application development, the application still needs to have a separate database to store the data needed by the application. doc This contains the documentation made for the application that is being developed. lib Code developed for the application that are not part of the MVC classes and code files. log Log files for the application. These are automati- cally created by Rails. public Contains the static files needed by the application. (i.e images) Figure 1. A simple diagram showing how MVC architecture works, in script context of Rails. Contains Rails scripts for different utilities needed by the application. test 1) Model - ActiveRecord Library: To represent a Model Folder to contain test code for the application. layer in the project being created, Rails has a library called tmp ActiveRecord to implement model classes and linking it Files needed by the application that are related to to the web application database. ActiveRecord library and . its concept is based on [14], a design concept created vendor by Martin Fowler. The concept of ActiveRecord is that it Plugins installed in Rails that are being used by first maps relational databases into object classes, which the application. is called Object Relational Mapping [15]. The mapping is done due to the fact that relational tables are structured differently compared to object oriented classes. Typically C. MVC[13] a relational database table could be traced as an object One of Ruby on Rails main technical highlight is that class with the column description as attributes and each the projects created follows the principle of Model-View- row is an object of the class. But with addition of foreign Controller design architecture in arranging the applications keys, disjoint, overlap, and other relational database table functionality. Model classes represents the object linked characteristics, the differences between relational database from an existing database and its business logic features in entities and object oriented is evident, thus it needs to be manipulating the data. View are the templates that are being mapped or converted for object-oriented use of the system. rendered to be shown to the user depending what the user Each relational database row and its attributes are encap- needs to see. Controller is the interface for the application sulated within object classes. And then the class definition users web browser, it handles requests between the browser, contains data access methods for the specific data in the communicates with models to process the data needed, and database table. Also. it also contains other business logic renders the view templates and sends it back to the browser. processing methods to manipulate the attributes of the object The diagram below shows the simple interaction of a users and the linked data in the database if needed. This class web browser to a MVC system. that represents the data from the database is called a Model, There are main components and libraries built-in on Rails and the relationship between Models are called Associations. to support and design the MVC architecture for the web Associations can define model hierarchy and association application development: ActiveRecord library is to support cardinality between models. ActiveRecord::Base is the base Model classes in linking to database entities, ActionCon- class for creating models and also for creating associations troller module on ActionPack library is the base class for all between models. controller objects for the project, and ActionView module 2) Controller - ActionController Module: Controller on ActionPack library assists in developing the templates classes are the classes that handles the communication needed for different view. between the content of the application (View rendering and Model data manipulation) and the request/response handling ActiveResource of Users web browser. Thus, only the Controller layer on the It is a framework to link objects and RESTful [6] MVC architecture should know the methods that relates in web services. It is similar to ActiveRecord, it does browser requests and response. ActionController class under Object-Relational Mapping to model REST web the Action Pack library in Rails represents the controller services into objects. class that the application needs. Usually, each model (or each ActiveSupport web page/view) should have its own controller class, and Collection of utility classes for Rails usage. Could each active entity in the view that a user could interact that also be used for the development of the application. produces a request should have its own method inside the Railities controller class. These methods are called action methods, The core or the center of Rails code, which de- which handles the process flow, or routing, within the fines on how Rails functions as a framework for system. The handling of action method routing could be developing projects for web applications. either predefined or could be configured by the developer. The ancestor class for all ActionController class within the project is called ActionController::Base. E. Tools to Aid Rails Development 3) View-ActionView Module: The view layer handles the As stated above, Ruby on Rails provides the classes and display structure that the user sees in using application in the framework needed by the developer to develop their a given time. Based on our experiences using the web, we desired web application. Aside from the framework, Rails could all say that many website servers uses different layouts also provide tools to aid development of the application, for different webpages of different purposes. It is the view ranging from console tools up to automatic code generation layer that handles these different layout views depending on tools that satisfies the philosophy of Rails development. which aspect of the application is being viewed by the user. In Rails, it is the ActionView module inside the Action Pack 1) Rails Console: Rails console is an extension of Inter- library that handles the different views that the application active Ruby console (irb) [16] - the command-line console in could have. Views in Rails are usually templates composed Ruby to aid Ruby-based development. Similar to irb, Rails of HTML [12] files and .erb (embedded ruby) [16] files. console is extended to aid developers of Rails application for Given that this layer handles the template for views, this setting up the system, for development, and for debugging. layer must not have any business logic methods inside it. Command-line consoles aids in viewing the system state in a given system instance, and helps the developer to control the D. Other Components or Libraries system in a more powerful manner compared to managing Aside from the main ones discussed above that handles only the applications view interface in a web browser for the core architecture of the project, there are also other further debugging. components and libraries that Rails have for additional 2) WEBrick: WEBrick [17] is a package provided in implementation of the designed application: Rails to provide aid in application development in terms ActionDispatch of local hosting the project before the actual deployment. Part of the Action Pack library (that includes Ac- The application, before release, still needs to be hosted tionController and ActionView), ActionDispatch somewhere for its development and testing. WEBrick is are a set of classes that handles web request routing local so that the application could be hosted and dispatch to applications. for its further development by the developer. One feature of ActionMailer WEBrick is that changes applied to the project being hosted A component for email services development for automatically updates the server, thus removing the time the application being developed. It enables the ap- overhead spent for restarting the server for the developer to plication to send, process, and receive emails. The see the change in accessing the application in a web browser. base class ActionMailer::Base are the parent class 3) Code GenerationScripts and Migration Files: These for mailer models in the system that are being used are the components of Rails that helps the developer create for the email functionality being implemented. the application project easier and faster. The generation ActiveModel scripts helps in generating the skeleton model and controller It is an interface between the Action Pack li- classes needed by the system. It also helps in creating unit brary components and Object-Relational Mapping tests for the classes being generated, and it also creates components (i.e. ActiveRecord). This enables the migration files that handles the recognition of the application developer to have configuration control over the to the database schema being used. Both code generation usage of other ORM frameworks if it is not desired scripts and migration files helps by automatically generating to use ActiveRecord as the applications default code for the application when the user follows the default ORM. configuration of the system. F. Deployment folder. Now youre ready to use Rails with MySQL. After the development of the application, it needs to be One of the few helpful commands to know while using deployed as a web service as a form of release for clients us- Rails is . This is Rubys version of make (Ruby Make). It age. Ruby on Rails website [11] recommends some external uses a type of makefile to run tasks and builds. One example tools to help the developer deploy their project to the internet is rake db:create which creates all of your databases for the community. One of the suggested tools in [11] is Phusion application. Another helpful tool is bundle, a dependency Passenger a.k.a. mod rails [18]. The deployment process of manager. For example bundle install should install all the the web application developed relies on the specific tool dependencies/gems that your application requires. being used. Adding additional information about each tools Now, you are ready to test your Rails installation. After process for deployment is outside of the scope of this report. creating a project, navigate to its root directory and run rails Please see [11] for available tools for Rails . This will start up WEBrick, a simple ruby server, deployment. through which you can view your web application. Just navigate to localhost:3000 in your favourite web browser. V. TUTORIAL The default welcome to rails page should show; just follow A. Setting up Ruby and Ruby on Rails the instructions to get started making your first project! Setting up Rails is a little more work for those that are B. Learn to Math used to using PHP and having little to no set up required. First we want to create a project, open command prompt However, this initial set up time is worth it. Time will and type the command: quickly be made up for due to the speed at which a web application can be developed with Rails. The first step on rails new MathProject -d mysql the path to fast web development is installing Ruby. Go into the new MathProject directory. As you can see For demonstration purposes, the version of Ruby we this set up a lot of folders and files. Since this is a short suggest is 1.8.7 p358, which can be downloaded free from tutorial, the folders you need to know about are apps, config http://rubyforge.org/frs/shownotes.php?release id=46588 and db. The apps folder contains your models, view and for Windows. When prompted to integrate into PATH, controller folders. The db folder has a migrate folder that yes should be checked for convenience. After the installer contains the entities in your database. Finally the config finishes RubyGems, a package manager, can be installed folder has the file routes.rb which contains your routes - by typing gem update –system’. the links you use to redirect on your website. Next, the Devkit should be installed from We are going to use Nifty to auto-generate files for user http://rubyinstaller.org/downloads. After extracting and authentication. First modify the Gemfile, uncomment the navigating to the downloaded Devkit in command prompt, line: the ruby dk.rb init’ and ruby dk.rb install commands will finish the installation. What the Devkit does is install gem ’bcrypt-ruby’, ’˜> 3.0.0’ necessary gems for the next step: installing Rails. (this is used for encryption), also add the line With Ruby and the Devkit installed, running gem install rails at a command prompt will finally install Ruby on Rails! gem "nifty-generators", :group => :development Now the environment is ready to create a new project (appli- Now run the command cation). All that needs to be run is rails new project name; adding -d mysql will use a MySQL database which you will bundle install need to install separately. In addition to installing MySQL, which will install nifty generators. Nifty generators is auto you need to install a gem for it by running gem install mysql. generation software which we will use to make our User. MySQL installation is probably the hardest part of the Create the table using: process. After installing MySQL Server and Connectors from rails generate nifty:authentication http://dev.mysql.com/downloads/mirror.php?id=405845#mirrors, rails generate nifty:layout you must manually copy the LIBMYSQL.dll file, as rails rake db:migrate and ruby will not do it for you. This file can be found at, This will create a User entity in the database with an id, for example, username, email, password, password hash, password salt, C:\Program Files\MySQL\Connector C 6.0.2\ created at, and updated at columns. Users are authenticated lib\opt using the BCrypt encryption gem. It also creates a bunch of web pages and ruby files and must be placed in the containing classes and functions to log in, check passwords, Ruby\bin etc. Check the file user.rb, if Now we need to create a page for answering math questions. Create a folder called maths inside the view require ’bcrypt’ folder. Inside that folder create a file index.html.erb. isnt at the top of the file and Put this following code inside the file: include BCrypt

Hello, Rails!

isnt at the beginning of the User class, add them. The variables rand1 and rand2 which are random numbers When someone goes to our site we want them to go to between 0 and 1000, ops is an array containing the operators the auto-generated file views/sessions/new.html.erb. for adding, subtracting, multiplying and dividing and randop To do this well have to change the route inside con- is a random number between 0 and 3 to choose one of the fig/routes.db. Uncomment and modify the root route: operators. root :to => ’sessions#new’ <% rand1 = rand(1000) %> <% rand2 = rand(1000) %> Since this is going to be a math website, we want users <% ops = [’+’, ’-’, ’/’, ’*’] %> to have a score for how many questions they got right. Find <% randop = rand(4) %> and modify the accessible attributes: The next line simply shows the user what the math attr_accessible :username, :email, question is. Then the form begins with the random numbers :password, :password_confirmation, :score and operators in the questions being put inside r1, r2, and op to be passed using GET when the user submits. Also add the score to create users.db What is <%= rand1 %> <%= ops[randop] %> t.string :password_hash <%= rand2 %>? t.string :password_salt <%= form_tag :r1 => rand1, :r2 => rand2, => t.integer :score :op => randop do %> Drop the database and (inside command prompt) recreate This code allows the user to submit the form with their it with answer inside q. rake db:create <%= label_tag(:q, "Answer:") %> rake db:migrate <%= text_field_tag(:q) %> Now the the database has been recreated with a score <%= submit_tag("GO!") %> column. <% end %> Now we want to be able to add, update, and get our score. Now we check to see if the users answer was correct. If Add this to the User class inside user.rb. they answered correctly then we find their id and increase def increase_Score() their score, we also print out their new score. Else their score update_attributes(:score => score+1) will decrease. end <% if(params[:r1] != nil) %> <%@user = User.find(session[:user_id]) %> def decrease_Score() <% if(eval(params[:r1]+ops[params[:op].to_i] update_attributes(:score => score-1) +params[:r2]) == params[:q].to_i) %> end <%= "Correct!" %> <% @user.increase_Score() %> def get_Score <% else %> return score <%= "Wrong Answer!" %> end <% @user.decrease_Score() %> <% end %> In increase Score() and decrease Score() the up- <%= "Your score is:" %> date attributes() function updates an attribute of User (in this <%= @user.get_Score()%> case score) inside the database. Depending on whether the <%end%> user gets the question right or wrong, their score increases or decreases by 1 respectively. The get Score() simply returns To get access to this page we need a controller and to add the score of the User. a route inside routes.rb to access it. To create the maths controller use the command over to Java (Twitter has now moved its entire search stack rails generate controller maths from Ruby-on-Rails to Java. [19]). This will create a maths contoller.rb file inside While this one example might dissuade new programmers app/controllers. Navigate to the file and modify it as to use RoR because of its problems with scalability it is follows still a hotly debated topic. Many senior Rails developers Once navigating to the webpage, there should be a login say scalability isnt a problem with RoR (Dix, 2010). They page displayed. This was all generated by nifty. Initially, say that the main problem for scalability is the database. By there will be no users in the database. By clicking the dividing up your system into services that access the data register link, a new account can be created. Once you you can distribute the load [20] while using Ruby on Rails created an account youll be automatically logged in. If you to hold all the services together. look inside the MySQL Workbench youll see the new user There are some sites that managed to use Justin.tv while account added. After creation, that user is now logged in. maintaining high speed. One example is Justin.tv a media There is (obviously) no advanced error checking or logged- streaming/ VOD website. in checking. Additionally, there is not a link to the math page There are 5 ways that Justin.tv improved speed while created earlier. However, by entering localhost:3000/math, using Rails [21]: this page can be viewed. Again, there is no error checking 1) SQL - Decreased database querying times by finding on this page, so navigating to it while not logged in will out cause an error. First try entering in the right answer, the score should be • Which queries were slow, indexing queries displayed with a value of 1 which can be checked with the • Refactoring slow queries score inside the database. Now when you test entering in • Retrieve only the needed information from the the wrong answer you should see your score go down by database one when this displayed in the website. Youll also see the 2) C Libraries same page in the database. You should be able to tell just • Speed of C how fast Ruby on Rails is after this tutorial, since most of • Better memory management then Ruby the code was generated by Rails. The only major piece of 3) Upgraded MemCache to latest version - which in- user written code is the index page for the Maths view. creased speeds by a factor of 3 Once navigating to the webpage, there should be a login 4) Cache Expiration page displayed. This was all generated by nifty. Initially, • Changed expiry times of caches there will be no users in the database. By clicking the register link, a new account can be created. Once you 5) created an account youll be automatically logged in. If you 6) GC Tuning look inside the MySQL Workbench youll see the new user 7) Regain Memory account added. After creation, that user is now logged in. • Less objects allocated There is (obviously) no advanced error checking or logged- • Removed unused dependencies from Gemfiles in checking. Additionally, there is not a link to the math page • Removed old controllers/ views created earlier. However, by entering localhost:3000/math, After these improvements garbage collection sped up by this page can be viewed. Again, there is no error checking 10%, response time decreased to 80ms, and over 50 thousand on this page, so navigating to it while not logged in will useless objects were saved. cause an error. This just shows that while Ruby on Rails might make First try entering in the right answer, the score should be it hard to scale big applications reliably, its certainly not displayed with a value of 1 which can be checked with the impossible to improvise to improve the speed of your score inside the database. Now when you test entering in application. the wrong answer you should see your score go down by According to [22] some other major websites that use one when this displayed in the website. Youll also see the Ruby on Rails- Groupon, GitHub, Justin.tv, and Hulu. same page in the database. You should be able to tell just how fast Ruby on Rails is after this tutorial, since most of VII.RUBYON RAILS COMPARED the code was generated by Rails. The only major piece of user written code is the index page for the Maths view. In the world of web development today, there is a wide variety of languages and frameworks available for use. This VI.NOTABLE APPLICATIONS can make deciding what to use for a project more difficult. One of the most notable applications of Ruby on Rails The following section will compare and contrast Ruby on is Twitter. However due to Twitters explosive growth and Rails with more mature languages, as well as more modern, Ruby on Rails problems of scalability, Twitter is switching but less mature, frameworks that are arising in its wake. A. PHP and Java [3] (2012, February) 37signals: Web-based collaboration apps While on their own PHP and Java do not constitute a full for small business. [Online]. Available: http://37signals.com/ stack framework like RoR does, they are both heavily used [4] M. Slater. (2012, April) Understanding ruby on rails. [Online]. within web development due to their inherent flexibility. Available: http://www.buildingwebapps.com/articles/79188- PHP and Java both allow, even require, extensive config- understanding-ruby-on-rails uration by the developer. This lends to their flexibility, but can also be a hinderance due to the amount of extra work [5] (2012, February) Ruby on rails guides: Get- ting started with rails. [Online]. Available: required. RoR, however, highly discourages from modifying http://guides.rubyonrails.org/getting started.html any of the pre-built configurations, promoting learning to work within those confines.[23] [6] R. Fielding. (2012, February) Architectural styles Due to RoR’s relative immaturity, it has been criticized and the design of network-based software architec- to be not as scalable as PHP and Java. On the other hand, tures. [Online]. Available: http://www.ics.uci.edu/ field- ing/pubs/dissertation/top.htm by having a full stack framework available for use, it goes without question that a website can be developed far faster [7] R. on Rails Team. (2012, February) Ruby on rails. [Online]. using RoR, where a single Rails developer can do the work Available: http://rubyonrails.org/ of an entire team using Java.[24] [8] ——. (2012, April) Ruby on rails documentation. [Online]. B. Django and Zend Available: http://api.rubyonrails.org/ Django and Zend, like RoR, are full-stack frameworks, [9] ——. (2012, 04) Ruby on rails guides: designed to be easy to use and implement. The largest Getting started with rails. [Online]. Available: difference between the three is the language that they are http://guides.rubyonrails.org/getting started.html based upon. Zend is built off of PHP and Django is based on Python, unlike Rails being built off of Ruby. Zend, being [10] T. Fisher, Ruby on Rails R Bible, 1st ed. Wiley Publishing Inc., October 2008, no. 67-74, 107-109, 147-149, 173-179. based on PHP, has held the value of flexibility despite the additional framework.[25] The Zend framework is utilized [11] R. on Rails Team. (2012, February) Ruby on rails: Deploy. by many high profile companies, including Best Buy and [Online]. Available: http://rubyonrails.org/deploy Bank of America. [12] (2012, April) Rfc 1866 - hypertext markup language - 2.0. C. .NET MVC [Online]. Available: http://tools.ietf.org/html/rfc1866 .NET MVC is a very new development framework pro- [13] T. Reenskaug. (2012, February) Trygve/mvc. [Online]. duced by Microsoft, which was released in 2009. It is based Available: http://heim.ifi.uio.no/ trygver/themes/mvc/mvc- off of the C# language which is very modern, having roots index.html in both Java and C/C++. Like RoR, it follows the MVC design pattern. [14] M. Fowler. (2012, April) P of While core functionality is very similar between RoR and eaa: Active record. [Online]. Available: http://www.martinfowler.com/eaaCatalog/activeRecord.html .NET MVC, .NET MVC has been found to suffer from a relative lack of community support for both development [15] Hibernate. (2012, April) What is object/relational support and plugins. This is mostly caused by its young mapping? - jboss community. [Online]. Available: age. http://www.hibernate.org/about/orm VIII.CONCLUSION [16] R. P. L. Team. (2012, February) Ruby programming There are many advantages and disadvantages to using language. [Online]. Available: http://www.ruby-lang.org/en/ the Ruby on Rails framework. Deciding on whether or not [17] Y. Santoso. (2012, April) Gnome’s to use Ruby on Rails for an application depends on the type guide to . [Online]. Available: of qualities the project requires. The initial set up does take http://microjet.ath.cx/webrickguide/html/html webrick.html a little more time than some of the alternative frameworks. TM By demonstrating the creation of a simple web application, [18] Phusion. (2012, April) Overview – ( ) (a.k.a mod rails / mod rack). [Online]. Available: we have hopefully given some insight in to the amount of http://www.modrails.com/ work required to setup and create projects with Rails. [19] A. Williams. (2012, April) Once again, twit- REFERENCES ter drops ruby for java. [Online]. Avail- [1] (2012, February) Ruby on rails. [Online]. Available: able: http://www.readwriteweb.com/cloud/2011/04/twitter- http://rubyonrails.org/ drops-ruby-for-java.php

[2] (2012, February) Ruby. [Online]. Available: http://www.ruby- [20] P. Dix, Service-Oriented Design with Ruby on Rails. lang.org/en/ Addison-Wesley Professional, 2010. [21] (2012, April). [Online]. Available: http://www.slideshare.net/kwi/rails-performance-at-justintv- guillaume-luccisano

[22] Stuart. (2012, April) Top 50 ruby on rails websites. [Online]. Available: http://storecrowd.com/blog/top-50-ruby- on-rails-websites/

[23] B. A. Tate and C. Hibbs, Ruby on Rails Up and Running. O’Reilly Media, Inc., August 2006, no. 2.

[24] D. Geer, “Will software developers ride ruby on rails to success,” Computer, vol. 39, no. 2, p. 19, February 2006.

[25] R. Allen, N. Lo, and S. Brown, Zend Framework in Action. Manning Publications, January 2009, no. 15.