トップ «前の日記(2007-02-23) 最新 次の日記(2007-02-25)» 編集

3 日坊主日記


2007-02-24 rails for ruby 1.9 [長年日記]

_ [Ruby][Rails] rails for ruby 1.9 始めます

ベースラインの目処がたったので所信表明。

_ 目標

このプロジェクトは Ruby on Rails を Ruby 1.9 に対応させることを目標とします。

_ ソースコード

Ruby 1.9 trunk を元にします。

Ruby on Rails 1.2 (1-2-stable branch) を元にします。

Ruby on Rails のコアを形成する以下のライブラリを優先的に取り扱います。

  • activesupport
  • actionpack
  • activerecord

_ 関連ライブラリ

Ruby on Rails の開発に必要なライブラリをインストールします。

  • rake
  • rubygems
  • sqlite-ruby (activerecord のテストは sqlite3 で行う)
  • flexmock

Ruby on Rails を動かすために必要なライブラリが Ruby 1.9 に対応していない場合は、 Ruby 1.9 に対応するためのパッチを作ります。

Ruby 標準ライブラリ

  • cgi,rb
  • optparse.rb

外部ライブラリ

  • rake
  • rubygems
  • sqlite-ruby

_ 開発プラットフォーム

Linux (Fedora 5) (i686-linux), MS-Windows XP Pro (mingw32).

_ テスト

Ruby on Rails に備わっているユニットテストを使って Ruby 1.9 対応をチェックします。

テストコードが Ruby 1.9 に対応していない場合は、修正します。

_ 公開

ソースコードは subversion で公開します。

_ 進捗

進捗は rake test の結果を出力することで把握します。

autobuild を用意したい。

_ [Ruby] sqlite3-ruby

sqlite3-ruby の CVS HEAD を mingw で試す。

# fix.rb:
while line = gets
  line.gsub!(/RSTRING\((.+?)\)->ptr\b/, 'RSTRING_PTR(\1)')
  line.gsub!(/RSTRING\((.+?)\)->len\b/, 'RSTRING_LEN(\1)')
  line.gsub!(/\bBLOB\b/, 'SQLITE3_BLOB')
  print line
end

たぶん SWIG 側を直すべきなのだろうけどとりあえず。 (SWIG も CVS HEAD から作った)。

BLOB は wtypes.h のとかぶるので名前変更。

lib/sqlite3/driver/dl/api.rb で dl/import を使ってるんだけど

Index: lib/sqlite3/driver/dl/api.rb
===================================================================
--- lib/sqlite3/driver/dl/api.rb        (revision 9188)
+++ lib/sqlite3/driver/dl/api.rb        (working copy)
@@ -35,7 +35,7 @@
 module SQLite3 ; module Driver; module DL;

   module API
-    extend ::DL::Importable
+    extend ::DL::Importer

     library_name = case RUBY_PLATFORM.downcase
       when /darwin/

dl/import は mingw でも使えますか?

# lib/sqlite3/driver/dl/api.rb:
require 'dl/import'

module SQLite3 ; module Driver; module DL;

  module API
    extend ::DL::Importer

    library_name = case RUBY_PLATFORM.downcase
      when /darwin/
        "libsqlite3.dylib"
      when /linux/
        "libsqlite3.so"
      when /win32/
        "sqlite3.dll"
      else
        abort <<-EOF
== * UNSUPPORTED PLATFORM ======================================================
The platform '#{RUBY_PLATFORM}' is unsupported. Please help the author by
editing the following file to allow your sqlite3 library to be found, and
submitting a patch to jamis_buck@byu.edu. Thanks!

#{__FILE__}
=========================================================================== * ==
        EOF
    end

_ [Ruby] rubygems: gzip error installing sources-0.0.1.gem

rubygems を入れようとすると post-install.rb でひっかかる。

[moriq@can rubygems]$ echo $GEM_HOME
/home/moriq/c
[moriq@can rubygems]$ ~/c/bin/ruby ./post-install.rb
  Successfully built RubyGem
  Name: sources
  Version: 0.0.1
  File: sources-0.0.1.gem
/home/moriq/c/lib/ruby/site_ruby/1.9/rubygems/installer.rb:111:in `raise': gzip error installing sources-0.0.1.gem (Gem::InstallError)
        from /home/moriq/c/lib/ruby/site_ruby/1.9/rubygems/installer.rb:111:in `rescue in install'
        from /home/moriq/c/lib/ruby/site_ruby/1.9/rubygems/installer.rb:64:in `install'
        from ./post-install.rb:88:in `block in install_sources'
        from ./post-install.rb:84:in `chdir'
        from ./post-install.rb:84:in `install_sources'
        from ./post-install.rb:116:in `<main>'

でも pkgs/sources/sources-0.0.1.gem は手動で install できる。

[moriq@can rubygems]$ ~/c/bin/gem install pkgs/sources/sources-0.0.1.gem
Successfully installed sources, version 0.0.1
[moriq@can rubygems]$ ls ~/c/
bin  cache  doc  gems  lib  man  share  specifications

謎い。

svn st で pkgs/* が見えないのは svn:ignore してるから。

[]