用 Ubuntu 搭建一个 Ruby on Rails 本地开发环境
| 2011-06-29 14:52
想要开发 Ruby on Rails 应用吗?虽然已经有一些(初级的)Ruby on Rails 教程了,但是似乎在如何搭建一个简洁而更新的本地开发环境方面还有些不甚确定的地方。
这个教程将引导你通过几个步骤来搭建一个基于 Ubuntu 的 Ruby on Rails 本地开发环境。而这个教程的即将发布的第二部分,将帮助你搭建一个 Ubuntu VPS。当前你暂时知道 VPS 是虚拟私有服务器的意思就可以了,让我们先将注意力转回到如何搭建本地开发环境中。
Ruby On Rails? Ubuntu?
什么是 Ruby on Rails?什么是 Ubuntu 呢?
简单的说,Ruby on Rails 是一个 Web 开发框架,它可以让你使用 Ruby 语言开发 Web 应用。如其官方网站所述:“Ruby on Rails 是一个开源的 Web 开发框架,它可以提高程序员的编程乐趣和开发效率,它让你通过惯例优于配置的方式写出优美的代码。”
而 Ubuntu,是一个“着重于可用性方面的 Debian Linux衍生发行版。”它是这些年最流行的 Linux 发行版。更妙的是,Ruby on Rails 和 Ubuntu 都是开源的,也就是说,它们完全免费!
简述
在本教程中,我们使用 Ruby Version Manager (RVM)脚本来安装 Ruby on Rails 和 RubyGems,并使用 RubyGems 来安装 Rails 和 Capostrano。这个机器同时也提供版本控制功能,这是通过 Git 和 PostgreSQL 数据库来实现的。本教程需要一个新安装的 Ubuntu 机器和互联网连接,不过大多数的(Debian 和 Ubuntu 衍生版的)Linux 也应该可以。
在本教程写作时,所用的最新版本是:Ubuntu 10.10、Ruby 1.9.2 和 Rails 3.0.7。本教程也在 Ubuntu 10.04 和即将发布(译注:现已发布)的 Ubuntu 11.04 上测试通过。
在本教程中,我们需要大量使用 Linux 命令行。因此,我在文末附了一篇文中所用到的 Linux 命令的简短词汇表。
更新系统
那么让我们开始吧。首先以管理员身份(或通过 sudo )登录到你的机器,并打开一个终端窗口。下面的命令都需要在该窗口输入。美元符号$就是命令提示符,在其后直接输入命令并按回车即可。
前三个命令将更新软件包列表、升级当前安装的软件包、安装新的软件包并删除冲突的软件包。这样你的机器就会保持最新状态。最后的命令是重启机器,在大量更新了软件包后重启是一个不错的做法。
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get dist-upgrade $ sudo reboot
为安装 RVM 做准备
机器重启后,再次登录并打开一个终端窗口。RVM 脚本需要先安装好 Curl 和 Git。Curl 是一个使用多种协议(如 HTTP 或 FTP)进行数据传输的工具。而“Git 是一个免费的开源分布式版本控制系统,适用于从小型项目到非常大的项目,兼顾了速度和效率。”Git是多数 Ruby on Rails 开发者所选择的版本控制系统。
$ sudo apt-get install curl $ sudo apt-get install git-core
配置Git
Git 会在 RVM 脚本中使用,我们也在在本教程的第二部分中使用它。安装之后,我们需要花一点时间来配置它。配置很容易:只要提供一个用户名和邮件地址即可。
$ git config --global user.name "Your Name" $ git config --global user.email your-email@address.com
如:
$ git config --global user.name "John Doe" $ git config --global user.email johndoe@mail.com
安装 RVM
现在我们可以安装 RVM 了。RVM 的意思是 Ruby 版本管理器,“是一个命令行工具,让你容易的安装、管理和使用多个 Ruby 环境及其相应的 Gem 包。”下列命令来安装这个脚本。RVM 将安装在你当前登录用户的主目录里。
$ bash <
切换到主目录,然后修改用户的 bash 设置文件,以确保每次用户登录时候 RVM 脚本都会载入。我们使用 Nano 来编辑 bash 设置文件。Nano 是一个简单的命令行的文本编辑器,以后我们还会使用到它。
$ cd $ nano .bashrc
在你的 bash 设置文件末尾加入以下行。编辑之后,按下 CTRL + O 保存,然后按 CTRL + X 退出 Nano。如果你希望不保存而退出 Nano,按下 CTRL + X 然后按 N。
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"
用以下命令行在当前登录中手动重新载入设置文件,也可以另外打开一个新的终端窗口自动载入。这样 rvm 命令就可以用了。
$ source .bashrc
你可以通过下列命令来检查 RVM 脚本是否可以工作。
$ type rvm | head -1
如果一切正常,命令将返回“rvm is a function”(rvm 是函数)。否则,可以访问 RVM 网站的“Troubleshooting your install”栏目找找解决办法。
为安装 Ruby 和 RubyGems 做准备
在从源代码编译和安装 Ruby 和 RubyGems 时,RVM 可以很方便的查看之间的软件包依赖关系。
$ rvm notes
可以列出标准版的 Ruby 所需的依赖包,和安装它们的命令。有些包也许已经安装好了。
$ sudo apt-get install build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev
使用 RVM 安装 Ruby 和 RubyGems
首先,我们要安装 Ruby,“一个动态的、开源的简单而高效的编程语言。它的优雅语法便于阅读并很容易编写。”
然后我们要安装 RubyGems,这是一个“首选的 Ruby 软件包系统。它提供了一个分发 Ruby 程序和库的标准格式,一个易于使用的管理 Gem 包的安装工具,一个在任何装有 RubyGems 的机器上提供 Gem 软件包的 Gem 服务器,和发布 Gem 软件包的标准方式。”
像上面的 RVM 命令描述的,RVM 也有一个命令可以看到哪个版本的 Ruby 可安装。通过以下命令查看哪些 Ruby 版本可以安装:
$ rvm list known
安装标准版的 Ruby,由于需要从源代码编译,所以需要一些时间。
$ rvm install 1.9.2
使用安装好的 Ruby 前,需要设置该版本为默认版本。
$ rvm --default use 1.9.2
检查一下 Ruby 和 RubyGems 的版本,来确保正确安装。
$ ruby -v $ gem -v
如有必要,手动更新一下 RubyGems 和其他需要更新的 Gem 。
$ gem update --system $ gem update
使用 RubyGems 安装 Rails
Rails 全部都打包在 Rails Gem 中。安装它是这个教程中最容易的部分。使用 RubyGems 来安装它,即 gem 命令。安装完成后,检查其版本来确保正确安装。
$ gem install rails $ rails -v
使用 RubyGems 安装 Capistrano
Capistrano 是 “一个在多个服务器上运行脚本的开源工具。它的主要用途是分发 Web 应用。它自动将应用的新版本分发到一个或多个 Web 服务器上,包括执行相关的支持任务,如修改数据库。”使用 RubyGems 安装 Capistrano ,并检查其版本来确保正确安装。
$ gem install capistrano $ cap -V
安装 PostgreSQL
PostgreSQL 是 “一个复杂的对象-关系数据库系统,支持绝大多数的 SQL 结构,如子查询、事务和用户定义的类型和函数。”安装 PostgreSQL 及其相关软件包。这些相关软件是稍后要安装的 pg Gem所需要的,pg Gem用于连接 PostgreSQL 和 Ruby on Rails。
$ sudo apt-get install postgresql libpq-dev
配置 PostgreSQL
安装好之后,使用增强安全的 pSQL 来配置 PostgreSQL。pSQL 是一个 PostgreSQL 的交互终端,用于管理数据库任务。
默认情况下,pSQL 登录时不需要口令。我们将修改认证模式并重新载入 PostgreSQL 配置。但在这之前,要给PostgreSQL的管理用户 postgres 指定一个口令。登录到 pSQL,给 postgres 指定一个安全的密码,然后退出 pSQL。
$ sudo -u postgres psql # \password postgres # \q
现在,将认证模式从 ident 修改为 md5。这将确保登录 pSQL 需要密码,且密码是加密存储的。需要修改的两行位于配置文件的末尾附近。修改后,重新载入 PostgreSQL 的配置。
$ sudo nano /etc/postgresql/8.4/main/pg_hba.conf $ sudo /etc/init.d/postgresql reload
大多数的 PostgreSQL 的其它配置都存储在另外的配置文件中。那些配置也可以优化,不过不在本教程的范围内。让我们将注意力转回来,如果对其他配置做了修改,也需要重新载入以生效。
$ sudo nano /etc/postgresql/8.4/main/postgresql.conf
现在,本地开发环境已经安装完成!
测试设置
为了确认一切都正常,让我们开发一个非常小的应用,来了解一下 Ruby on Rails。这个过程包括以下步骤:
- 为测试应用创建一个数据库用户
- 为测试应用创建一个数据库
- 使用 PostgreSQL 数据库创建一个测试应用
- 安装测试应用需要的 Gem
- 配置测试应用的数据库连接
- 生成测试应用的简单框架
- 迁移框架的数据库到测试应用的数据库
- 启动内建的 Web 服务器
- 用浏览器访问测试应用
- 停止内建的 Web 服务器
当以上测试都顺利完成后,我们再进行如下步骤:
- 删除测试应用的数据库
- 删除测试应用的数据库用户
- 删除测试应用
这些测试都在本地测试环境中进行。在VPS中测试的约定如下(数据库用户名和数据库名来自测试应用名):
Box 1.1
应用名称:test_app
数据库用户名:test_app
数据库用户密码:apple
数据库名:test_app_development
首先,使用 createuser 命令来创建测试应用的数据库用户。我们用 PostgreSQL 的管理用户 postgres 来操作,-P 参数表示交互输入密码。 “>”符号是提问的提示符。
$ sudo -u postgres createuser -P > Enter name of role to add: test_app > Enter password for new role: apple > Enter it again: apple > Shall the new role be a superuser? (y/n) n > Shall the new role be allowed to create databases? (y/n) n > Shall the new role be allowed to create more new roles? (y/n) n > Password: your-postgres-user-password
然后,创建一个测试应用的数据库用户为属主的数据库。虽然我们可以使用 Rake 来创建数据库,但是我们要使用 PostgreSQL ,所以让我们学习一下基本的 PostgreSQL 管理吧。使用 createdb 命令并通过 -O 选项指定数据库用户名。这里,还会提示输入PostgreSQL 的管理用户的密码。
$ sudo -u postgres createdb -O test_app test_app_development > Password: your-postgres-user-password
现在,数据库已经建好,可以创建实际的 Ruby on Rails 应用了。切换到你的主目录,创建一个名为 test_app 的 Rails 应用,并使用 PostgreSQL 作为数据库后端。-d 选项允许你指定首选的数据库类型。
$ cd $ rails new test_app -d postgresql
进入到 Rails 应用目录,使用 Bundler 安装需要的 Gem。Bundler 会处理“一个应用在整个生命周期内跨越多个机器的依赖关系”,并且“只支持 Rails 3。”
$ cd test_app $ bundle install
使用 Nano 修改数据库配置文件,在开发数据库配置中添加密码:“apple”。按照约定和Box 1.1中的设置,数据库名和数据库用户已经设置好了。
$ nano config/database.yml
现在生成一个基本的框架。这将创建一个 User 模型及其控制器。输入包括 name 和 email 字段,它们将存储在数据库中。
$ rails generate scaffold User name:string email:string
使用 Rake 迁移框架到开发数据库中。Rake 是 Ruby Make 的缩写。它是一个“简单的 Ruby 构建程序,类似于 Make,”允许你创建并迁移数据库。
$ rake db:migrate
现在,需要在浏览器中检查应用是否工作。启动内建的服务器,并用浏览器访问 http://localhost:3000/,特别是,要看看显示的测试应用的环境数据。再访问一下 http://localhost:3000/users,可以创建、编辑、查看和删除一些用户。
$ rails server
如果一切都看起来正常,就可以停止内建服务器了。
$ 按下 CTRL+C
当所有的工作都完成,你就可以删除这个测试应用的数据库及数据库用户了。使用 dropdb 来删除数据库。
$ sudo -u postgres dropdb test_app_development > Password: your-postgres-user-password
使用 dropuser 来删除数据库用户。
$ sudo -u postgres dropuser > Enter name of role to drop: test_app > Password: your-postgres-user-password
最后,切换到你的主目录,删除全部的测试应用目录。主要就恢复到一个干净的本地开发环境了,可以用于开发 Ruby on Rails 应用了。
$ cd $ rm -r test_app
将在稍后发布的教程的第二部分中,我们将帮助你通过几个步骤来建立一个 Ubuntu VPS,它用于运行(多个)Ruby on Rails 应用。
Linux 命令行参考
本教程中相关的 Linux 命令按照字母顺序列在下方。Linux 命令通常的格式是: 命令 -选项 参数,如:rm -r test_app。更多的细节,可以参考它们的帮助页面,可以用 man [命令]来查看。
- sudo [command] 用于以管理员身份执行命令。
- apt-get dist-upgrade 用于当前发行版的升级,它会自动处理依赖关系。
- apt-get install [package] 用于安装软件包
- apt-get update 用于更新软件包的索引。
- apt-get upgrade 用于更新当前已经安装的软件包
- bash <
- cd [location] 切换目录,如没有参数则切换到用户主目录。
- nano [file] 编辑文件。
- reboot 重启机器。
- rm -r [directory] 递归地删除目录(及其子目录)。
- source [script] 手动强制 bash 读取一个脚本。
- type [command] 显示 shell 中执行的命令类型。