dari88's diary

これから趣味にするプログラミング/PHP/javascript/kohana/CMS/web design/

rubyinstallerを使って完璧なRuby-2.1.0/2.1.1をコンパイル/ビルドする方法

 前の日記までの方法では限界があるのでRubyコンパイルする正解を探していたら、ついに発見しました。

 

oneclick rubyinstallerを使う

oneclick rubyinstaller のページからrubyinstallerをゲットします。

・解凍したら c:\rubyinstaller などに配置します。READMEを読みましょう。

UTF-8日本語を正常に扱うために、コンパイラはmingw64-32-4.7.2を使ってDevKitを構成することにします。

・既存のRubyにパスの通ったコマンドプロンプトを起動して先ずはDevKitを作ります。

cd c:\rubyinstaller
rake devkit DKVER=mingw64-32-4.7.2

・クロスコンパイル指定でconfigureしないとこけるので、config\ruby_installer.rbの130行目付近に下記を追加します。

        '--build=x86_64-w64-mingw32',
        '--host=i686-w64-mingw32',

Rubyの出力先を変更したい場合は、125行目付近の :install_target を変更します。

      :install_target => 'sandbox/Ruby210w',

コマンドプロンプトで作業すると見通しが悪いので、minttyを準備します。

・C:\rubyinstaller\sandbox\devkitにmsys.batがあるので、ショートカットを作ります。

・プロパティのリンク先に -mintty を追加します。ショートカットからminttyを起動して透過率・文字サイズ・画面サイズを設定します。

・再度minttyを起動して以下の手順でコンパイルします。

cd /c/rubyinstaller
PATH=/c/Ruby200/bin:$PATH
rake ruby21

Ruby-2.1.1をコンパイルする場合は、ソースをc:\ruby211cに置いたとして、次のような手順になります。

cd /c/rubyinstaller
PATH=/c/Ruby200/bin:$PATH
rake ruby21 LOCAL="c:\ruby211c" 

 

rubyinstallerについて

・config\ruby_installer.rbを見ると、拡張ライブラリは
   ffi, :gdbm, :iconv, :openssl, :yaml, :zlib, :tcl, :tk
 を使っています。

・また、通常のコンパルのあとで readline だけ特別に処理をしています。

・それぞれの外部ライブラリは以下から持ってきています。(config\dependencies.rb参照)(ライブラリはC:\rubyinstaller\sandboxにあります)

    :url => "http://packages.openknapsack.org/zlib",
      'zlib-1.2.7-x86-windows.tar.lzma'
    :url => "http://packages.openknapsack.org/openssl",
      'openssl-1.0.0l-x86-windows.tar.lzma'
    :url => "http://packages.openknapsack.org/libffi",
      'libffi-3.0.11-x86-windows.tar.lzma'
    :url => "http://packages.openknapsack.org/libyaml",
      'libyaml-0.1.5-x86-windows.tar.lzma'
    :url => "http://packages.openknapsack.org/libiconv",
      'libiconv-1.14-x86-windows.tar.lzma'
    :url => "http://packages.openknapsack.org/gdbm",
      "gdbm-1.8.3-x86-windows.tar.lzma"
    :url => "http://packages.openknapsack.org/pdcurses",
      "pdcurses-3.4-x86-windows.tar.lzma"
    :url => "http://packages.openknapsack.org/tcl",
      "tcl-8.5.12-x86-windows.tar.lzma"
    :url => "http://packages.openknapsack.org/tk",
      "tk-8.5.12-x86-windows.tar.lzma"
    :url => 'https://github.com/luislavena/rb-readline/archive',
    :target => 'sandbox/rb-readline',
      'v0.5.0.zip'

・通常のコンパイルの後で、各ライブラリのbinの中身をRuby210w/binにコピーしています。

・次に、rubyのソースファイルのbinの中身をRuby210w/binにコピーしています。

・次に、readlineの処理をしています。

・Historyを読むと、readlineRuby-2.0対応になっているようです。

 

ビルドの検証

UTF-8日本語の扱いは正常です。

railsのインストールは正常です。

rails new myapp で bundle のインストールも正常です。

・C:\Ruby210w\lib\ruby\gems\2.1.0\gems\sqlite3-1.3.9-x86-mingw32\lib\sqlite3\2.1に作成済みのsqlite3_native.soを入れてやります。

・Gemfileを書きなおしてbundle updateも正常です。

・scaffoldも正常に働きます。

・rake db:migrateも正常です。

rails sも正常、ユーザー登録も正常にできます。

・残念ながら'DL is deprecated, please use Fiddle'問題は解決していないので、Herokuにログインできません! herokuがdlを使っているのが問題なのだと思われます。

・総合的にはRubyInstallerのRuby-2.0.0並みの出来栄えだと思われます。