Learn Ruby on Rails: the Ultimate Beginner’s Tutorial

Tweet

Database Configuration

Configuring the database for a Rails application is frighteningly easy — all of the critical information is contained in just one file. We’ll take a look at it now, then create some databases for our application to use.

The Database Configuration File

The separation of environments is reflected in the Rails database configuration file database.yml. We saw a sample of this file back in Chapter 1, Introducing Ruby on Rails, and in fact we created our very own configuration file in Chapter 2, Getting Started, when we used the rails command. Go take a look! It lives in the config subdirectory of our Shovell application.

With the comments removed, the file should look like this (Depending on your MySQL configuration, you may need to use 127.0.0.1 as your host value, instead of localhost.):

Example 4.1. 01-database.yml

development:
adapter: mysql
database: shovell_development
username: root
password:
host: localhost
test:
adapter: mysql
database: shovell_test
username: root
password:
host: localhost
production:
adapter: mysql
database: shovell_production
username: root
password:
host: localhost

This file lists the minimum amount of information we need in order to connect to the database server for each of our environments (development, test, and production). With the default setup of MySQL that we installed in Chapter 2, Getting Started, we can be confident to proceed with our development using the root user and an empty password for the time being — all of our development should take place on a local machine, so we needn’t be concerned about someone accessing our super-secret Shovell application.

The parameter database sets the name of the database that’s to be used in each environment. As the configuration file suggests, Rails is able to support multiple databases in parallel. Note that we’re actually talking about different databases here, not just different tables — each database can host an arbitrary number of different tables in parallel. Figure 4.1 shows a graphical representation of this architecture.

1562_fig4.1
Figure 4.1. The database architecture of a Rails application

However, there’s one vital aspect missing from our current configuration: the databases referenced in our configuration file don’t exist yet! Let’s create them now.

We can create these databases using one of the many graphical front ends that are available for MySQL, or we can just jump into the command line. Because the commands are fairly simple, let’s create the databases from the command line for now; we’ll look at graphical database clients later in this chapter.

Creating the Databases

To launch the MySQL command line interface, type mysql -u root at the command prompt. (On a Mac, the command is called mysql5 instead of mysql — Mac users like to be different.)

$ mysql -u root
mysql>

The command to create a new database is simple enough: create database newdatabasename.

We’ll use it to create three databases — one for each of our environments — as shown in Figure 4.2.

Example 4.2. 02-create-databases.sql

CREATE DATABASE shovell_development;
CREATE DATABASE shovell_test;
CREATE DATABASE shovell_production;

Database Security and the root User

If you have any experience with databases, you might be feeling a little uncomfortable that we’re developing our application using the root user, without even setting a password. The reasoning behind this advice is as follows:

1. The default configuration of MySQL is such that connections to the database server can only be made from the same machine. This means that nobody — whether they’re sitting next to you, or working from the other side of the world — will be able to wreak havoc in your Rails development environment.

2. The MySQL command line and permissions system are complex and powerful tools, and database security is a topic that’s definitely beyond the scope of this book.

Of course, this is not a configuration that I would recommend for your production environment, but we’ll get into that in Chapter 12, Deployment and Production Use. If you’re interested in securing the database in your development environment, the MySQL manual contains some post-installation instructions that should serve you well.

1562_fig4.2
Figure 4.2. Creating a database for each environment

Now that our databases exist, we can use them to store data for our application!

development is the Default Database

By default, all Rails applications use the development environment unless specified otherwise. So any Rails commands that you execute from the command line will, for the time being, only affect the data in the development database. In Chapter 12, Deployment and Production Use, we’ll learn how to switch to the production environment.

Go to page: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10

Free book: Jump Start HTML5 Basics

Grab a free copy of one our latest ebooks! Packed with hints and tips on HTML5's most powerful new features.

  • D.S. Holder

    Very useful article- many thanks! I’m getting familiar with Ruby, but this helped me with the rails!