MacRuby on Rails #20110311-1

はじめに

MacRubyを普及させたい。その思いは日に日に高まっている。ではどうすればよ
いのか。Mac上でRubyを使っている人がMacRubyに移行するにはどうすればよい
のか。うん、それはRaiis。これが答え。

ということでMacRuby上でRailsが動くようにする。Railsには一切手を加えずに、
問題があればMacRubyを修正する。目標は7月。(当然、本業優先で)

高いハードルを乗り越えてこそハッカーへの道が開けるというもの。

Railsのインストール方法(cRuby編)

さて、ひさしくRailsをさわっていないため、まずはcRubyでのRailsのインストール方法
の確認から。アジャレイルズ本の第四版を参考に作業する。
※cRubyはtrunkを「19trunk」サフィックス付きでインストールしている。

$ sudo port upgrade sqlite3
$ ruby19trunk --version
  (以下、実行結果)
  ruby 1.9.3dev (2011-03-12 trunk 31096) [x86_64-darwin10.6.0]
$ gem19trunk update --system 
  (以下、実行結果)
  Latest version currently installed. Aborting.

$ gem19trunk uninstall rubygems-update 
  (以下、実行結果)
  ERROR:  While executing gem ... (Gem::InstallError)
      cannot uninstall, check `gem list -d rubygems-update`
$ gem19trunk install rails
  (以下、実行結果の一部。こんなに多くのgemをMacRubyで動かすことができるようにしなくてはいけないのか!?)
  Fetching: activesupport-3.0.5.gem (100%)
  Fetching: builder-2.1.2.gem (100%)
  Fetching: i18n-0.5.0.gem (100%)
  Fetching: activemodel-3.0.5.gem (100%)
  Fetching: rack-1.2.1.gem (100%)
  Fetching: rack-test-0.5.7.gem (100%)
  Fetching: rack-mount-0.6.13.gem (100%)
  Fetching: tzinfo-0.3.24.gem (100%)
  Fetching: abstract-1.0.0.gem (100%)
  Fetching: erubis-2.6.6.gem (100%)
  Fetching: actionpack-3.0.5.gem (100%)
  Fetching: arel-2.0.9.gem (100%)
  Fetching: activerecord-3.0.5.gem (100%)
  Fetching: activeresource-3.0.5.gem (100%)
  Fetching: mime-types-1.16.gem (100%)
  Fetching: polyglot-0.3.1.gem (100%)
  Fetching: treetop-1.4.9.gem (100%)
  Fetching: mail-2.2.15.gem (100%)
  Fetching: actionmailer-3.0.5.gem (100%)
  Fetching: thor-0.14.6.gem (100%)
  Fetching: railties-3.0.5.gem (100%)
  Fetching: bundler-1.0.10.gem (100%)
  Fetching: rails-3.0.5.gem (100%)

$ gem19trunk install sqlite3-ruby

目標とするRails3アプリ(cRuby編)

MacRuby on Railsで目標とするRails3アプリをcRubyで作成する。といっても
Hello World並で、scaffoldしただけのブックマーク管理アプリ。

$ ruby19trunk -S rails new demo
$ cd demo
$ ruby19trunk -S rails generate scaffold Bookmark title:string description:text url:string
$ rake19trunk db:migrate
  (以下、実行結果)
  (in /Users/kouji/work/ruby/work/demo)
  ==  CreateBookmarks: migrating ================================================
  -- create_table(:bookmarks)
     -> 0.0019s
  ==  CreateBookmarks: migrated (0.0020s) =======================================

$ ruby19trunk -S rails server  
  (以下、実行結果)
  => Booting WEBrick
  => Rails 3.0.5 application starting in development on http://0.0.0.0:3000
  => Call with -d to detach
  => Ctrl-C to shutdown server
  [2011-03-12 01:26:26] INFO  WEBrick 1.3.1
  [2011-03-12 01:26:26] INFO  ruby 1.9.3 (2011-03-12) [x86_64-darwin10.6.0]
  [2011-03-12 01:26:26] INFO  WEBrick::HTTPServer#start: pid=79068 port=3000

MacRubyの更新

MacRubyは当然最新のソース版を使う。SubversionではなくGitのソースを利用している。

$ git branch -a
  (以下、実行結果)
    add-xcode-templates
    id/106
    id/1069
  * master
    ruby_deploy_with_share
    remotes/origin/HEAD -> origin/master
    remotes/origin/master

$ rake
$ sudo rake install
$ macruby --version
  (以下、実行結果)
  MacRuby 0.10 (ruby 1.9.2) [universal-darwin10.0, x86_64]

Railsのインストール(MacRuby編)

怖いので以下の順で一つずつgemをインストールする。

  • activesupport-3.0.5.gem
  • builder-2.1.2.gem
  • i18n-0.5.0.gem
  • activemodel-3.0.5.gem
  • rack-1.2.1.gem
  • rack-test-0.5.7.gem
  • rack-mount-0.6.13.gem
  • tzinfo-0.3.24.gem
  • abstract-1.0.0.gem
  • erubis-2.6.6.gem
  • actionpack-3.0.5.gem
  • arel-2.0.9.gem
  • activerecord-3.0.5.gem
  • activeresource-3.0.5.gem
  • mime-types-1.16.gem
  • polyglot-0.3.1.gem
  • treetop-1.4.9.gem
  • mail-2.2.15.gem
  • actionmailer-3.0.5.gem
  • thor-0.14.6.gem
  • railties-3.0.5.gem
  • bundler-1.0.10.gem
  • rails-3.0.5.gem

activesupport-3.0.5.gem

$ sudo macgem install --verbose activesupport --version=3.0.5 --no-ri --no-rdoc
  ...
  Successfully installed activesupport-3.0.5
  1 gem installed

builder-2.1.2.gem

$ sudo macgem install --verbose builder --version=2.1.2 --no-ri --no-rdoc
  ...
  Successfully installed builder-2.1.2
  1 gem installed

i18n-0.5.0.gem

$ sudo macgem install --verbose i18n --version=0.5.0 --no-ri --no-rdoc
  ...
  Successfully installed i18n-0.5.0
  1 gem installed

ここまではうまくいっている。逆にうまく行き過ぎていて怖いくらい。

残りは一気にインストールしてみる。

$ sudo macgem install --verbose rails --no-ri --no-rdoc
  (以下、実行結果)
  Installing gem rack-1.2.1
  ...
  WARNING:  You are installing a new version of /usr/bin/rackup.
  This file already exists with a different shebang, possibly from a different
  ruby implementation or version. This operation may break the script.
  Do you still wish to continue? [yn] y (<- yを押してreturn。)
  ...

  Installing gem rake-0.8.7
  ...
  WARNING:  You are installing a new version of /usr/bin/rake.
  This file already exists with a different shebang, possibly from a different
  ruby implementation or version. This operation may break the script.
  Do you still wish to continue? [yn]  y  
  ...

  Installing gem rails-3.0.5
  ...
  WARNING:  You are installing a new version of /usr/bin/rails.
  This file already exists with a different shebang, possibly from a different
  ruby implementation or version. This operation may break the script.
  Do you still wish to continue? [yn]  y

これでRailsがインストールできた。

sqlite3-rubyのインストール

それではsqlite3のrubyバインディングをインストールする。

$ sudo macgem install --verbose sqlite3-ruby --no-ri --no-rdoc
  (以下、実行結果)
  ...
  Installing gem sqlite3-ruby-1.3.3
  ...
  Successfully installed sqlite3-1.3.3
  Successfully installed sqlite3-ruby-1.3.3
  2 gems installed

これもうまくできた。なんか怖い。

MacRuby on Rails

それではMacRubyRailsを動作させてみる。

$ macruby -S rails new demo
  (以下、実行結果)
        create
        create  README
        create  Rakefile
  ...
        create  vendor/plugins
        create  vendor/plugins/.gitkeep

$ macruby -S rails generate scaffold Bookmark title:string description:text url:string
  (以下、実行結果)
  Assertion failed: ((size_t)pos < current_exceptions.size()), function pop_current_exception, file vm.cpp, line 3434.
  zsh: abort      macruby -S rails generate scaffold Bookmark title:string description:text 

そうこなくっちゃ。動かなくて当然ですからw。そうでないと私の修行にならない。

Webrickはどうだろう。

$ macruby -S rails server
  (以下、実行結果)
  Assertion failed: ((size_t)pos < current_exceptions.size()), function pop_current_exception, file vm.cpp, line 3434.
  zsh: abort      macruby -S rails server

やはりだめか。

続きは後日。