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を読むと、readlineはRuby-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並みの出来栄えだと思われます。