そろそろMavericksのリリースも近いようですが、とりあえず手持ちのOS X 10.8.4 にgemでmechanizeをインストールしようとしたところ、ちょっと引っかかったので、覚え書きとして書いておきます。
まず普通にgemでインストールしようといたしますと、下記のようなエラーになります。
$ sudo gem install mechanize
Building native extensions. This could take a while...
ERROR: Error installing mechanize:
nokogiri requires Ruby version >= 1.9.2.
nokogiriというのは、mechanizeが使っているパーサーなんですが、最近のnokogiriはバージョン1.9.2以上のrubyが必要みたいです。Mountain Lionに元々入っているrubyは下記のように1.8.7です。
$ which ruby
/usr/bin/ruby
$ /usr/bin/ruby --version
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]
というわけで、MacPortsでruby1.9か2.0をインストールします。gemの対象になるrubyは、実行パスで先に来ているrubyのようなので、MacPortsでrubyをインストールして、/opt/local/bin/rubyが/usr/bin/rubyより前に来るようにしておけばいいのですが、MacPortsでそのままインストールするとruby1.9とかruby2.0とかいうコマンド名でインストールされてしまってよくありません。以前はportsでインストールする際に +nosuffix というvariantを指定していたようですが、最近はこのvariantがありません…
$ port variants ruby19
ruby19 has the variants:
c_api_docs: Generate documentation for Ruby C API
[+]doc: Install rdoc indexes and C API documents
mactk: Build using Mac OS X Tk Framework
* conflicts with tk
tk: Build using MacPorts Tk
* conflicts with mactk
universal: Build for multiple architectures
えー、どうすんのー、とおもったら、ruby_selectってのが取り込まれたっぽいです。先にruby19かruby20をインストールして、あとでselectで切り替えられるらしい。まじで。せっかくなのでruby20をインストールしよう。
$ which ruby
/usr/bin/ruby
$ sudo port install ruby20
$ which ruby
/usr/bin/ruby
$ which ruby2.0
/opt/local/bin/ruby2.0
ruby20をインストールすると、上記のように/opt/local/bin/ruby2.0というのがインストールされて、rubyというコマンドは/usr/bin/rubyのままです。そこでselectします。
$ sudo port select ruby
Available versions for ruby:
none (active)
ruby20
$ sudo port select ruby ruby20
Selecting 'ruby20' for 'ruby' succeeded. 'ruby20' is now active.
$ sudo port select ruby
Available versions for ruby:
none
ruby20 (active)
$ which ruby
/opt/local/bin/ruby
なるほど。これでmechanizeもご機嫌にインストールできますぜ。
$ sudo gem install mechanize
Successfully installed mechanize-2.7.2
やったね! 🙂
参考文献
- 「近頃の macports + ruby では +nosuffix variant が廃止されている」, k12uのアレ