LoginSignup
15
14

More than 5 years have passed since last update.

Ruby installer for Windows で gem install nokogiri

Last updated at Posted at 2014-03-04

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
...

おめでとうございます。

15
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
14