2009年8月30日,星期日

升级到 Snow Leopard

由Matt Aimonetti发布

上周五,苹果公司发布了其新的操作系统版本:Snow Leopard。升级到 SL 非常简单,甚至还能为你节省不少硬盘空间。但是,操作系统中发生了一些变化,你需要了解这些变化,以免在更新过程中感到沮丧,浪费时间与系统斗争。

Snow Leopard

对我们 Ruby 开发者来说,最关键的变化是,在 Snow Leopard 中,所有解释型语言(包括 Ruby)默认都运行在 64 位模式下(当然,前提是你的机器是 64 位的)。对于纯 Ruby 应用程序和库,这不应该带来任何问题。但如果你是从 Leopard 环境迁移过来的,并且为 32 位环境编译过 C 扩展,那么这些 gem 在 Snow Leopard 中将无法正常加载。同样的情况也适用于你可能在 32 位模式下编译过,并且想在你迁移的系统上使用的库。

你还需要知道一件事:Snow Leopard 现在捆绑的是 Ruby 1.8.7,而不是 1.8.6。这应该不是问题,因为 Rails 已经运行在 Ruby 1.8.7 上很久了,并且 Rails 3 将需要 Ruby 1.8.7,并且推荐使用 Ruby 1.9.2。

以下是进行正确迁移可能需要执行的常见任务的快速概览。

安装 Snow Leopard 开发者工具

在 Snow Leopard DVD 的“Optional Installs”(可选安装)下,安装“Xcode.mpkg”。使用所有默认选项。

Passenger

$ sudo gem install -r passenger
$ sudo passenger-install-apache2-module Press Enter when prompted. Passenger will compile and install its Apache module. Press Enter when prompted the second time too.

$ cd /etc/apache2

在你的文本编辑器中打开 httpd.conf(如果你使用 TextMate,可以尝试从命令行运行 mate httpd.conf),找到类似“LoadModule passenger_module”的行以及后面包含“passenger”的几行。删除它们。如果你看不到它们,将光标移到文件末尾。

然后插入以下行

LoadModule passenger_module /Library/Ruby/Gems/1.8/gems/passenger-2.2.4/ext/apache2/mod_passenger.so
PassengerRoot /Library/Ruby/Gems/1.8/gems/passenger-2.2.4
PassengerRuby /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby

MySQL

为了避免与 MySQL 出现奇怪的问题,强烈建议升级到 64 位版本。首先,如果 mysqld 正在运行,请将其关闭。(根据你的 MySQL 安装方式,你可能可以使用偏好设置面板,或者如果你通过 MacPorts 安装,可以使用 sudo /opt/local/share/mysql5/mysql/mysql.server stop)

现在从这里安装 Mac OS X 10.5 (x86_64) 版本的 mysql

当磁盘映像打开时,首先安装“mysql-5.1.37-osx10.5-x86_64.pkg”。使用所有默认选项。

接下来安装“MySQLStartupItem.pkg”。使用所有默认选项。

接下来安装“MySQL.prefPane”。双击进行安装。在提示时选择替换现有的偏好设置窗格。(显然,偏好设置窗格仍然是 32 位的。)此时,你可以点击“Start MySQL Server”来启动服务器并验证它是否正常工作。

卸载 MySQL 磁盘映像。

由于你从 Leopard 升级而来,你的 mysql gem 是为 32 位编译的,因此需要重新编译。然而,事情并没有那么简单,mysql gem 有点特殊。在 Snow Leopard 中,当你执行 gem install 来安装 C 扩展时,它会尝试为两种架构构建扩展:i386(32 位)和 x86_64(64 位)。问题在于来自 mysql.com 的二进制文件不是通用的,因此我们需要强制 C 扩展仅在 64 位下编译。

$ sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

注意:你不必为编译任何其他 gem 设置 ARCHFLAGS。

MacPorts

你应该已经准备就绪。但是,如果你依赖于你在 Leopard 上编译的任何库,你可能需要重新编译它们。MacPorts 用户不应认为这将自动完成。

你有不同的选项来升级你的 ports。

最简单的方法是升级 MacPorts

$ sudo port selfupdate
$ sudo port sync
$ sudo port upgrade --force installed

其他原生 gem

查看这个脚本,以获取需要重新安装的 gem 的精确列表,并获得有关升级过程的一些帮助。基本上,你只需要重新安装少数使用 C 扩展的 gem。