上周五,Apple 发布了他们的新版操作系统:Snow Leopard。升级至 SL 非常容易,还可以释放大量的硬盘空间。然而,该操作系统已经发生了一些变化,你需要了解这些变化,这样你才不会因为更新过程而感到沮丧,也不会在与系统进行斗争中浪费时间。
对于我们 Ruby 开发人员来说,关键的改变是,在 Snow Leopard 中,所有解释语言(包括 Ruby)现在都默认在 64 位中运行(显然,前提是你的计算机是 64 位的)。对于纯 Ruby 应用程序和库来说,这不会造成任何问题。但是,如果你从仅编译 32 位 C 扩展的 Leopard 环境迁移过来,这些 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 DVD 上,“可选的安装”下,安装“Xcode.mpkg”。使用所有默认选项。
$ 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 中出现奇怪的问题,强烈建议升级至 64 位版本。从关闭正在运行的 mysqld 开始。(根据你安装 MySQL 的方式,你可能可以使用偏好设置面板,或者如果你使用 MacPorts 进行了安装,则使用 sudo /opt/local/share/mysql5/mysql/mysql.server stop)
现在从此处安装 mysql 的 Mac OS X 10.5 (x86_64) 版本
在磁盘映像打开时,首先安装“mysql-5.1.37-osx10.5-x86_64.pkg”。使用所有默认选项。
接下来安装“MySQLStartupItem.pkg”。使用所有默认选项。
接下来安装“MySQL.prefPane”。双击以安装它。在出现提示时选择替换现有的偏好设置面板。(显然,该偏好设置面板仍然是 32 位的。)此时,你可以单击“启动 MySQL 服务器”以启动服务器并验证它的运行。
卸载 MySQL disk 映像。
由于您正准备从 Leopard 升级,因此您的 mysql gem 仅针对 32 位编译,因此需要重新编译。不过,这并不简单,mysql gem 是个例外。在 Snow Leopard 下,如果针对 C 扩展执行 gem 安装,则它会尝试构建两个架构的扩展:i386(32 位)和 x86_64(64 位)。问题在于,来自 mysql.com 的二进制文件不是通用的,因此我们需要强制只针对 64 位编译 C 扩展。
$ sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
提示:您不应设置 ARCHFLAGS 来编译任何其他 gem。
您应该已准备好一切。不过,如果您依赖于在 Leopard 上编译的任何库,则可能必须重新编译它们。MacPorts 用户不应认为它会自动为他们完成此操作。
您可以使用不同的选项来升级端口。
最简单的方法是升级 MacPorts
$ sudo port selfupdate
$ sudo port sync
$ sudo port upgrade --force installed
查看此 脚本 以获取需要重新安装的 gem 的精确列表,以及一些升级流程的帮助。基本上,您只需重新安装使用 C 扩展的几个 gem。