Ruby installer for Windows はここ http://rubyinstaller.org/downloads/ のバイナリです。
gem install nokogiri
したとき、nokogiriのバイナリリリースがインストーラーのRubyバージョンより遅れていると、ソースからネイティブライブラリをビルドしようとして、libxml2 がないという例の問題が発生します。 http://www.kaoriya.net/blog/2013/03/29/
経緯的には、nokogiriが入らないとBerkshelfが使えないというのが問題になりました。vagrant-berkshelfプラグインが終わってるから何とかしたいのです。Vagrantはomnibusだけにして、レシピはホストOSであらかじめ取ってくるようにさせたかった。簡単だと思ったらWindowsですごい落とし穴が...
以下、nokogiri の面倒を、最小労力でなんとかしようとした手順です。
Rubyを C:\Ruby200-x64
にインストールしていたとします。環境変数のPATHに "C:\Ruby200-x64\bin"
が通っている前提です。
ダウンロードサイトからDevKit DevKit-mingw64-*-*-sfx.exe
をダウンロードして C:\Ruby200-x64-DevKit
に展開します。
Git Bash で DevKit を初期化します。
$ cd /c/Ruby200-x64-DevKit/
$ ruby dk.rb init
$ ruby dk.rb install
必要なライブラリをダウンロードして展開します。これは Git Bash でやります。DevKitのbashにはビルド以外のコマンドが全く入ってないからです。
$ cd /c/Ruby200-x64-DevKit/home/username/
$ mkdir libxml2
$ cd libxml2
$ curl -O ftp://xmlsoft.org/libxml2/libxml2-2.9.1.tar.gz
$ tar xzf libxml2-2.9.1.tar.gz
$ curl -O ftp://xmlsoft.org/libxml2/libxslt-1.1.28.tar.gz
$ tar xzf libxslt-1.1.28.tar.gz
$ curl -O http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
$ tar xzf libiconv-1.14.tar.gz
DevKitの msys.bat
を叩いてもうひとつシェルを開きます。
$ cd libxml2
$ cd libxml2-2.9.1
$ ./configure
$ make
$ make install
$ cd ..
$ cd libxslt-1.1.28
$ ./configure
ここでそのままmakeするとエラーになるので、手でパッチを当てます。まあ強引ですが急ぐので。
libxslt/security.c
- ret = mkdir(directory, 755);
+ ret = mkdir(directory);
再開
$ make
$ make install
$ cd ..
$ cd libiconv-1.14
$ ./configure
$ make
$ make install
$ cd ..
これでDevKitの /usr/local
にいろいろ入るのでそのままDevKitのgemで...
gem install nokogiri --platform=ruby -- \
--with-xml2-include=/usr/local/include/libxml2 \
--with-xml2-lib=/usr/local/lib \
--with-xslt-dir=/usr/local
--with-iconv-dir=/usr/local
Git Bash から使いたいので
export PATH=/c/Ruby200-x64-DevKit/local/bin:$PATH
的なことを .bashrc
かWindowsの環境変数でやっておきます。(DLLは LD_LIBRARY_PATH
じゃないんですね)
あとは
$ gem install berkshelf
$ berks -v
Berkshelf (2.0.14)
Copyright 2012-2013 Riot Games
...
おめでとうございます。