Windows 7 上に Rails 2.3.4(Ruby 1.9.1 MySQL 5.4.3-beta) 開発環境を構築した時のメモ

環境構築のスピードを重視しています。

環境

Windows 7 Professional 64bit

Rubyインストール

ActiveScriptRuby and Other packagesRuby-1.9.1-p243 をダウンロードしインストール。
インストールパスは C:\bin\ruby にした。

gemをアップデート

gem update --system

RailsMySQL/Rubyインストール

gem install rails
gem install mysql

MySQLインストール

MySQL :: Download MySQL Community Server の Windows(x64ではない) の Without installer をダウンロードし展開。
展開フォルダ名を mysql に変更して C:\bin 配下に配置し、C:\bin\mysql にパスを通す。
my-medium.ini をコピーしてファイル名を my.ini にして以下の部分を編集。
初期の設定ファイルはぐちゃぐちゃなので最低限の修正を加えて後でじっくり編集する方向で。

[client]
#socket = /tmp/mysql.sock
          :
[mysqld]
#socket = /tmp/mysql.sock
character_set_server = utf8
collation_server = utf8_general_ci
          :
[mysql]
default_character_set = cp932

サービス登録してスタート

mysqld --install mysql --defaults-file="--defaults-file=C:\bin\mysql\my.ini"
net start mysql

発生した問題への対応

MySQL/RubyがM17Nに対応していない問題の対応

以下のファイルを編集することで対応
C:\bin\ruby\lib\ruby\gems\1.9.1\gems\activerecord-2.3.4\lib\active_record\attribute_methods.rb

  • 148行目を以下の文字列に置換
          access_code = cast_code ? "(v=@attributes['#{attr_name}']) && #{cast_code}" : "(@attributes['#{attr_name}'].class == String) ? @attributes['#{attr_name}'].force_encoding('UTF-8') : @attributes['#{attr_name}']"
  • 273行目を以下の文字列に置換
            (column.type_cast(value).class == String) ? column.type_cast(value).force_encoding("UTF-8") : column.type_cast(value)
Ruby 1.9からString[n]の解釈が変わった問題の対応

以下のファイルを編集することで対応
C:\bin\ruby\lib\ruby\gems\1.9.1\gems\activesupport-2.3.4\lib\active_support\message_verifier.rb

  • 43行目から51行目を以下の内容に置換
        if a.respond_to?(:bytesize)
          # 1.9
          if a.bytesize == b.bytesize
            result = 0
            j = b.each_byte
            a.each_byte { |i| result |= i ^ j.next }
            result == 0
          else
            false
          end
        else
          # 1.8
          if a.size == b.size
            result = 0
            for i in 0..(a.length - 1)
              result |= a[i] ^ b[i]
            end
            result == 0
          else
            false
          end
        end
db:create時にRubyがSEGVしてしまう場合

以下のファイルをダウンロードして C:\bin\ruby\bin に置く
http://instantrails.rubyforge.org/svn/trunk/InstantRails-win/InstantRails/mysql/bin/libmySQL.dll

終焉

あとは適当なRailsアプリを作って動作確認して完了。
複雑なアプリで試したわけじゃないので、まだ問題があるかもしれない。