296
Chapter 10CHAPTER 10
Large Projects 10
Fools ignore complexity. Pragmatists suffer it.
Some can avoid it. Geniuses remove it.
—Alan Perlis
This chapter introduces several concepts that are related to deploying large applica-
tions in general, and Rails applications in particular. These are valuable concepts for
any project, regardless of the framework being used.
Version Control
For all but the tiniest of projects, version control is non-negotiable. Version control is
like a time machine for a project; it aids in collaboration, troubleshooting, release
management, and even systems administration. Even for a solo developer working
on a small project on one workstation, the ability to go back in time across a code-
base is one of the most valuable things to have.
There are two primary models for version control systems: centralized and decentral-
ized. Though the former is the most widely known, the latter is steadily gaining in
popularity and has some amazing capabilities.
Centralized Version Control
Centralized version control is the most popular model, and perhaps the easiest to
understand. In this model, there is a central repository, operated by the project
administrators. This repository keeps a virtual filesystem and a history of the changes
made to that filesystem over time.
Figure 10-1 illustrates the typical working model used for centralized development.