development_dependencies_install.md 6.9 KB
Newer Older
1 2 3 4 5
Development Dependencies Install
================================

This guide covers how to setup an environment for Ruby on Rails core development.

6 7
After reading this guide, you will know:

J
Jonathan Roes 已提交
8 9 10 11
* How to set up your machine for Rails development
* How to run specific groups of unit tests from the Rails test suite
* How the ActiveRecord portion of the Rails test suite operates

12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
--------------------------------------------------------------------------------

The Easy Way
------------

The easiest and recommended way to get a development environment ready to hack is to use the [Rails development box](https://github.com/rails/rails-dev-box).

The Hard Way
------------

In case you can't use the Rails development box, see section above, these are the steps to manually build a development box for Ruby on Rails core development.

### Install Git

Ruby on Rails uses Git for source code control. The [Git homepage](http://git-scm.com/) has installation instructions. There are a variety of resources on the net that will help you get familiar with Git:

R
Roman Shmatov 已提交
28
* [Try Git course](http://try.github.io/) is an interactive course that will teach you the basics.
29
* The [official Documentation](http://git-scm.com/documentation) is pretty comprehensive and also contains some videos with the basics of Git
R
Roman Shmatov 已提交
30
* [Everyday Git](http://schacon.github.io/git/everyday.html) will teach you just enough about Git to get by.
V
Vijay Dev 已提交
31
* The [PeepCode screencast](https://peepcode.com/products/git) on Git is easier to follow.
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
* [GitHub](http://help.github.com) offers links to a variety of Git resources.
* [Pro Git](http://git-scm.com/book) is an entire book about Git with a Creative Commons license.

### Clone the Ruby on Rails Repository

Navigate to the folder where you want the Ruby on Rails source code (it will create its own `rails` subdirectory) and run:

```bash
$ git clone git://github.com/rails/rails.git
$ cd rails
```

### Set up and Run the Tests

The test suite must pass with any submitted code. No matter whether you are writing a new patch, or evaluating someone else's, you need to be able to run the tests.

Install first libxml2 and libxslt together with their development files for Nokogiri. In Ubuntu that's

```bash
$ sudo apt-get install libxml2 libxml2-dev libxslt1-dev
```

If you are on Fedora or CentOS, you can run

```bash
$ sudo yum install libxml2 libxml2-devel libxslt libxslt-devel
```

60
If you have any problems with these libraries, you can install them manually by compiling the source code. Just follow the instructions at the [Red Hat/CentOS section of the Nokogiri tutorials](http://nokogiri.org/tutorials/installing_nokogiri.html#red_hat__centos) .
61

R
Robin Dupret 已提交
62
Also, SQLite3 and its development files for the `sqlite3` gem — in Ubuntu you're done with just
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

```bash
$ sudo apt-get install sqlite3 libsqlite3-dev
```

And if you are on Fedora or CentOS, you're done with

```bash
$ sudo yum install sqlite3 sqlite3-devel
```

Get a recent version of [Bundler](http://gembundler.com/)

```bash
$ gem install bundler
$ gem update bundler
```

and run:

```bash
$ bundle install --without db
```

This command will install all dependencies except the MySQL and PostgreSQL Ruby drivers. We will come back to these soon. With dependencies installed, you can run the test suite with:

```bash
$ bundle exec rake test
```

You can also run tests for a specific component, like Action Pack, by going into its directory and executing the same command:

```bash
$ cd actionpack
$ bundle exec rake test
```

100
If you want to run the tests located in a specific directory use the `TEST_DIR` environment variable. For example, this will run the tests in the `railties/test/generators` directory only:
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139

```bash
$ cd railties
$ TEST_DIR=generators bundle exec rake test
```

You can run any single test separately too:

```bash
$ cd actionpack
$ bundle exec ruby -Itest test/template/form_helper_test.rb
```

### Active Record Setup

The test suite of Active Record attempts to run four times: once for SQLite3, once for each of the two MySQL gems (`mysql` and `mysql2`), and once for PostgreSQL. We are going to see now how to set up the environment for them.

WARNING: If you're working with Active Record code, you _must_ ensure that the tests pass for at least MySQL, PostgreSQL, and SQLite3. Subtle differences between the various adapters have been behind the rejection of many patches that looked OK when tested only against MySQL.

#### Database Configuration

The Active Record test suite requires a custom config file: `activerecord/test/config.yml`. An example is provided in `activerecord/test/config.example.yml` which can be copied and used as needed for your environment.

#### MySQL and PostgreSQL

To be able to run the suite for MySQL and PostgreSQL we need their gems. Install first the servers, their client libraries, and their development files. In Ubuntu just run

```bash
$ sudo apt-get install mysql-server libmysqlclient15-dev
$ sudo apt-get install postgresql postgresql-client postgresql-contrib libpq-dev
```

On Fedora or CentOS, just run:

```bash
$ sudo yum install mysql-server mysql-devel
$ sudo yum install postgresql-server postgresql-devel
```

140
After that, run:
141 142 143 144 145 146

```bash
$ rm .bundle/config
$ bundle install
```

147
First, we need to delete `.bundle/config` because Bundler remembers in that file that we didn't want to install the "db" group (alternatively you can edit the file).
148 149 150 151

In order to be able to run the test suite against MySQL you need to create a user named `rails` with privileges on the test databases:

```bash
152 153 154
$ mysql -uroot -p

mysql> CREATE USER 'rails'@'localhost';
155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
mysql> GRANT ALL PRIVILEGES ON activerecord_unittest.*
       to 'rails'@'localhost';
mysql> GRANT ALL PRIVILEGES ON activerecord_unittest2.*
       to 'rails'@'localhost';
```

and create the test databases:

```bash
$ cd activerecord
$ bundle exec rake mysql:build_databases
```

PostgreSQL's authentication works differently. A simple way to set up the development environment for example is to run with your development account

```bash
$ sudo -u postgres createuser --superuser $USER
```

and then create the test databases with

```bash
$ cd activerecord
$ bundle exec rake postgresql:build_databases
```

181 182 183 184 185 186 187 188 189 190 191 192 193 194
It is possible to build databases for both PostgreSQL and MySQL with

```bash
$ cd activerecord
$ bundle exec rake db:create
```

You can cleanup the databases using

```bash
$ cd activerecord
$ bundle exec rake db:drop
```

195 196 197 198 199
NOTE: Using the rake task to create the test databases ensures they have the correct character set and collation.

NOTE: You'll see the following warning (or localized warning) during activating HStore extension in PostgreSQL 9.1.x or earlier: "WARNING: => is deprecated as an operator".

If you’re using another database, check the file `activerecord/test/config.yml` or `activerecord/test/config.example.yml` for default connection information. You can edit `activerecord/test/config.yml` to provide different credentials on your machine if you must, but obviously you should not push any such changes back to Rails.