そろそろ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
やったね! 🙂
参考文献