在 Mac 上搭建 Ruby on Rails 开发环境

guide rails postgresql mac ruby mountain-lion xcode homebrew

近期 Apple 就应该会发布新版本的操作系统了 Mountain Lion, 而目前推出的 GM 版本不出意外也应该是最终发行的版本.

这里我们会在一台全新的 mac 上搭建 rails 开发环境, 使用的软件版本如下:

  • OS X Mountain Lion 10.8
  • rvm 1.14.5
  • Ruby 1.9.3-p194
  • Postgresql 9.1.4

可能实际安装的版本和目前不同, 所以需要根据实际环境来修正安装步骤. 另外还需要对 mac 系统的终端有一定的了解.

Xcode

从 4.3+ 以后, Apple 将 xcode 包装成了一个独立的程序, 而作为一般非 ios 或者 mac 的开发人员来说, 并不需要下载整个 xcode, 要进行编译的话, 只需要安装 Command Line Tools for Xcode 就可以有一个命令行的编译环境了.

Command Line Tools for Xcode 可以直接在 apple 的 developer center 中下载, 点击这里进入(需登陆) 当然普通用户也强烈推荐安装 Command Line Tools for Xcode, 他为系统提供了编译所需要的一切环境. 有了编译环境我们就可以自由的编译各种开源软件了.

另外也可以通过系统自带的 app store, 下载安装 xcode, 通过 xcode 的偏好设置下载 Command Line Tools. 不过由于 xcode 需要 3.5g 的空间, 并且不开发 ios 或者 mac 基本毫无作用, 所以不推荐下载 xcode 再安装 Command Line Tools.

Homebrew

Homebrew 是目前 mac 上最好用的源代码编译框架, 之前的 MacPorts 虽然也可以使用, 但是它完全不依赖系统目前已经提供的任何包, 导致任何东西都需要编译, 当然有些人可能认为是优点. 不过有时候难免自己编译些东西. 用 homebrew 是可以很好的和自己编译的内容整合, 但 macport 就不这么方便了.

安装 homebrew, 我们在终端中输入

/usr/bin/ruby -e "$(/usr/bin/curl -fksSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)"

完成后, brew 就安装好了, 接着需要新建 ~/.profile 文件, 并添加如下内容

export PATH=/usr/local/bin:/usr/local/sbin:$PATH

if [ "${BASH-no}" != "no" ]; then
	[ -r ~/.bashrc ] && source ~/.bashrc
fi

主要是让 brew 安装的程序, 可以比系统自带的拥有更高的优先级. 以便提供或者修正系统自带程序的问题和不足.

完成以上步骤以后, 需要关闭当前的终端, 在开启一个新终端. 使得刚刚修改的 .profile 生效.

接着可以输入 brew -v 来查看当前安装的 brewhome 的版本. 并且输入

brew update

将 brew 更新至最新版本, 以后使用 brew install 前也最好输入该命令以保证安装的包总是最新的, 以减少兼容性冲突.

RVM

RVM 是一个管理 ruby 各种版本, 并且协助编译的工具. 任何情况下都推荐使用 rvm 来管理和安装 Ruby.

和 homebrew 全局系统共用不同, 作为开发环境, 一般安装在用户主目录中. 这里我们只需要在终端中输入

curl -L get.rvm.io | bash -s stable

rvm 就自动安装完成了.

需要特别注意的是 rvm 1.14.5 会自动把配置 加入 .bash_login, .zlogin, 但其中又不载入全局的 .profile 导致其他环境变量丢失. 所以还需要在 ~/.bash_login 中加入

[ -r ~/.profile ] && source ~/.profile

这只是其中一种修改方案, 还有其他很多中改法. 另外如果 shell 用的不是 bash 而是 zsh 则请自行修改.

接着开启一个新的终端, 就可以通过输入 rvm -v 来查看我们安装 rvm 的版本.

Ruby

安装完 rvm 后, 就可以使用 rvm 来编译和安装 ruby. 安装前还需要确认安装环境, 我们输入

rvm requirements

可以看到结果中有一段是

For Ruby 1.9.3: Install libksba # If using Homebrew, 'brew install libksba'

You can use & download osx-gcc-installer: https://github.com/kennethreitz/osx-gcc-installer
** NOTE: Currently, Node.js is having issues building with osx-gcc-installer. The only fix is to install Xcode over osx-gcc-installer.

...

Xcode 4.3+ users
- please be warned
- only ruby-1.9.3-p125+ is partially supported
- in case of any compilation issues:
 * downgrade to Xcode 4.1
 * uninstall Xcode and install osx-gcc-installer
and reinstall your rubies.

其实最主要的意思还是, apple 用 clang 代替了 gcc, 所以有些需要编译的库会有问题. 需要安装 gcc 或者旧版本的 xcode. 不过么我目前还没有遇到兼容性问题, 所以直接无视了, 如果以后遇到了编译问题再研究也就是了, 而且显而易见随着软件的更新也会逐步的兼容 clang 所以等出问题了再说.

接着开始安装 ruby 1.9.3, 按照之前的描述还需要安装一个叫 libksba 的库, 而 readline 是用来解决无法输入中文的问题, 所以我们依次输入

brew install libksba
brew install readline
LDFLAGS="-L/usr/local/opt/readline/lib" CPPFLAGS="-I/usr/local/opt/readline/include" rvm install 1.9.3

等待 rvm 自动的下载和编译 ruby, 由于新版本 rvm 会自动设置刚安装的 ruby 为该用户默认的 ruby, 所以这里不需要其他操作了, 如果不是则需要输入

rvm use 1.9.3 --default

代替系统提供的 ruby 成我们自己编译的版本

接着可以输入 rvm list 来验证是否是我们安装的 ruby.

接着就可以使用 gem install rails 来安装最新版本的 rails 了.

安装 gem 的时候, 会自动安装 ri 和 rdoc, 但一般都在线查看帮助文档, ri 和 rdoc 基本没有用, 所以我们可以 编辑 ~/.gemrc 加入 gem: -V --no-ri --no-rdoc 来关闭 ri 和 rdoc 的安装.

数据库 Postgresql

postgresql 和 mysql 中推荐于使用 postgresql, 所以这里只提供 postgresql 在 mac 的安装步骤.

因为我们之前安装了 homebrew, 所以安装 postgresql 及其简单, 只需要输入

sudo brew install postgresql

就可以完成安装了. 接着还需要初始化数据和设置成随系统自动启动. (需要注明的是, 在目前的 Mountian Lion 环境下, 必须加入 --no-python --without-ossp-uuid 才可以完成安装.)

mac 从 lion 后就默认提供了一个叫 _postgres 的用户, 所以推荐使用该用户来初始化数据库 (如果使用当前用户初始化数据库会导致本机其他用户无法使用当前用户所生成的数据库). 但系统默认禁止了这个用户登入,就需要我们开启该用户的登入shell, 在终端中输入

sudo dscl . -change /Users/_postgres UserShell /usr/bin/false /bin/bash

接着建立 Postgresql 数据目录

mkdir -p /usr/local/var/postgres
sudo chown _postgres:_postgres /usr/local/var/postgres/

接着切换到 _postgres 来初始化数据库

sudo su - _postgres -c "/usr/local/bin/initdb --locale=zh_CN.UTF-8 /usr/local/var/postgres"

这里需要主意的是 initdb 必须使用全路径 /usr/local/bin/initdb, 因为 lion 默认自带 Postgresql , 会和我们安装的数据库冲突.

接着需要设置 Postgresql 随系统自动启动. 首先开启一个新终端, 并复制启动文件到系统目录

sudo cp /usr/local/Cellar/postgresql/9.1.4/homebrew.mxcl.postgresql.plist /Library/LaunchDaemons/

这里需要注意的是我们复制的是 /usr/local/Cellar/postgresql/9.1.4/homebrew.mxcl.postgresql.plist 这个文件, 这里的 9.1.4 是我们数据库的版本, 接着编辑该文件 /Library/LaunchDaemons/homebrew.mxcl.postgresql.plist, 找到

<key>UserName</key>
<string>username</string>

修改成

<key>UserName</key>
<string>_postgres</string>

还需要输入命令, 开启自动启动.

sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.postgresql.plist

等启动完成以后就可以通过 _postgres 来管理数据库了, 但一般都会使用 postgres 做为超级用户. 所以我们还需要输入

psql -U _postgres postgres
CREATE ROLE postgres LOGIN PASSWORD 'postgres'
	SUPERUSER CREATEDB CREATEROLE REPLICATION;
\q

这样我们就新建好一个用户名和密码都是 ‘postgres’ 的超级用户了.

另外 Lion 系统默认参数会导致, postgresql 使用段时间后会没有足够的内存启动, 所以我们还需要编辑 /etc/sysctl.conf 文件, 并且添加

kern.sysv.shmmax=524288000

接着重启系统, 就可以使用 postgresql 数据库.

最后

这样就基本把一个最基本的 ruby 开发环境搭建好了, 其他语言的话也可以参考这个步骤来安装.

最后至于编辑器, 这里我只对于初学者推荐使用 sublime text 2 编辑器, 忘记不真气的 textmate 吧.

扩展阅读

更新历史

  • 2012-07-18更新 Mountain Lion 下的安装步骤
  • 2012-04-28更新 xcode 4.3 和 rvm 1.13.0 的安装步骤

Comments