1 简单方式
搭建开发环境最简单、也是推荐的方式是使用 Rails 开发虚拟机。
2 笨拙方式
如果你不便使用 Rails 开发虚拟机,参见下述说明。这些步骤说明如何自己动手搭建开发环境,供 Ruby on Rails 核心开发使用。
2.1 安装 Git
Ruby on Rails 使用 Git 做源码控制。Git 的安装说明参见官网。网上有很多学习 Git 的资源:
Try Git 是个交互式课程,教你基本用法。
官方文档十分全面,也有一些 Git 基本用法的视频。
Everyday Git 教你一些技能,足够日常使用。
GitHub 帮助页面中有很多 Git 资源的链接。
Pro Git 是一本讲解 Git 的书,基于知识共享许可证发布。
2.2 克隆 Ruby on Rails 仓库
进入你想保存 Ruby on Rails 源码的文件夹,然后执行(会创建 rails
子目录):
$ git clone git://github.com/rails/rails.git $ cd rails
2.3 准备工作和运行测试
提交的代码必须通过测试组件。不管你是编写新的补丁,还是评估别人的代码,都要运行测试。
首先,安装 sqlite3
gem 所需的 SQLite3 及其开发文件 。macOS 用户这么做:
$ brew install sqlite3
Ubuntu 用户这么做:
$ sudo apt-get install sqlite3 libsqlite3-dev
Fedora 或 CentOS 用户这么做:
$ sudo yum install sqlite3 sqlite3-devel
Arch Linux 用户要这么做:
$ sudo pacman -S sqlite
FreeBSD 用户这么做:
# pkg install sqlite3
或者编译 databases/sqlite3
port。
然后安装最新版 Bundler:
$ gem install bundler $ gem update bundler
再执行:
$ bundle install --without db
这个命令会安装除了 MySQL 和 PostgreSQL 的 Ruby 驱动之外的所有依赖。稍后再安装那两个驱动。
如果想运行使用 memcached 的测试,要安装并运行 memcached。
在 macOS 中可以使用 Homebrew 安装 memcached:
$ brew install memcached在 Ubuntu 中可以使用 apt-get 安装 memcached:
$ sudo apt-get install memcached在 Fedora 或 CentOS 中这么做:
$ sudo yum install memcached在 Arch Linux 中这么做:
$ sudo pacman -S memcached在 FreeBSD 中这么做:
# pkg install memcached或者编译
databases/memcached
port。
安装好依赖之后,可以执行下述命令运行测试组件:
$ bundle exec rake test
还可以运行某个组件(如 Action Pack)的测试,方法是进入组件所在的目录,然后执行相同的命令:
$ cd actionpack $ bundle exec rake test
如果想运行某个目录中的测试,使用 TEST_DIR
环境变量指定。例如,下述命令只运行 railties/test/generators
目录中的测试:
$ cd railties $ TEST_DIR=generators bundle exec rake test
可以像下面这样运行某个文件中的测试:
$ cd actionpack $ bundle exec ruby -Itest test/template/form_helper_test.rb
还可以运行某个文件中的某个测试:
$ cd actionpack $ bundle exec ruby -Itest path/to/test.rb -n test_name
2.4 为 Active Record 做准备
Active Record 的测试组件运行三次:一次针对 SQLite3,一次针对 MySQL,还有一次针对 PostgreSQL。下面说明如何为这三种数据库搭建环境。
编写 Active Record 代码时,必须确保测试至少能在 MySQL、PostgreSQL 和 SQLite3 中通过。如果只使用 MySQL 测试,虽然测试能通过,但是不同适配器之间的差异没有考虑到。
2.4.1 数据库配置
Active Record 测试组件需要一个配置文件:activerecord/test/config.yml
。activerecord/test/config.example.yml
文件中有些示例。你可以复制里面的内容,然后根据你的环境修改。
2.4.2 MySQL 和 PostgreSQL
为了运行针对 MySQL 和 PostgreSQL 的测试组件,要安装相应的 gem。首先安装服务器、客户端库和开发文件。
在 macOS 中可以这么做:
$ brew install mysql $ brew install postgresql
然后按照 Homebrew 给出的说明做。
在 Ubuntu 中只需这么做:
$ sudo apt-get install mysql-server libmysqlclient-dev $ sudo apt-get install postgresql postgresql-client postgresql-contrib libpq-dev
在 Fedora 或 CentOS 中只需这么做:
$ sudo yum install mysql-server mysql-devel $ sudo yum install postgresql-server postgresql-devel
MySQL 不再支持 Arch Linux,因此你要使用 MariaDB(参见这个声明):
$ sudo pacman -S mariadb libmariadbclient mariadb-clients $ sudo pacman -S postgresql postgresql-libs
FreeBSD 用户要这么做:
# pkg install mysql56-client mysql56-server # pkg install postgresql94-client postgresql94-server
或者通过 port 安装(在 databases
文件夹中)。在安装 MySQL 的过程中如何遇到问题,请查阅 MySQL 文档。
安装好之后,执行下述命令:
$ rm .bundle/config $ bundle install
首先,我们要删除 .bundle/config
文件,因为 Bundler 记得那个文件中的配置。我们前面配置了,不安装“db”分组(此外也可以修改那个文件)。
为了使用 MySQL 运行测试组件,我们要创建一个名为 rails
的用户,并且赋予它操作测试数据库的权限:
$ mysql -uroot -p mysql> CREATE USER 'rails'@'localhost'; mysql> GRANT ALL PRIVILEGES ON activerecord_unittest.* to 'rails'@'localhost'; mysql> GRANT ALL PRIVILEGES ON activerecord_unittest2.* to 'rails'@'localhost'; mysql> GRANT ALL PRIVILEGES ON inexistent_activerecord_unittest.* to 'rails'@'localhost';
然后创建测试数据库:
$ cd activerecord $ bundle exec rake db:mysql:build
PostgreSQL 的身份验证方式有所不同。为了使用开发账户搭建开发环境,在 Linux 或 BSD 中要这么做:
$ sudo -u postgres createuser --superuser $USER
在 macOS 中这么做:
$ createuser --superuser $USER
然后,执行下述命令创建测试数据库:
$ cd activerecord $ bundle exec rake db:postgresql:build
可以执行下述命令创建 PostgreSQL 和 MySQL 的测试数据库:
$ cd activerecord $ bundle exec rake db:create
可以使用下述命令清理数据库:
$ cd activerecord $ bundle exec rake db:drop
使用 rake 任务创建测试数据库能保障数据库使用正确的字符集和排序规则。
在 PostgreSQL 9.1.x 及早期版本中激活 HStore 扩展会看到这个提醒(或本地化的提醒):“WARNING: => is deprecated as an operator”。
如果使用其他数据库,默认的连接信息参见 activerecord/test/config.yml
或 activerecord/test/config.example.yml
文件。如果有必要,可以在你的设备中编辑 activerecord/test/config.yml
文件,提供不同的凭据。不过显然,不应该把这种改动推送回 Rails 仓库。
反馈
我们鼓励您帮助提高本指南的质量。
如果看到如何错字或错误,请反馈给我们。 您可以阅读我们的文档贡献指南。
您还可能会发现内容不完整或不是最新版本。 请添加缺失文档到 master 分支。请先确认 Edge Guides 是否已经修复。 关于用语约定,请查看Ruby on Rails 指南指导。
无论什么原因,如果你发现了问题但无法修补它,请创建 issue。
最后,欢迎到 rubyonrails-docs 邮件列表参与任何有关 Ruby on Rails 文档的讨论。