Using MySQL as Rails3 database on CentOS 5.6

Rails3 で MySQL を使う場合の設定。ついこの間 stable release の最新である 3.0.7 の default adapter である mysql2 gem を使うことができなくなってしまったみたいなので mysql-ruby で代用する。

ちなみに Rails 3.1 は edge で使えるらしいのでそのうち release されて mysql2 を adapter として使うこともできるようになるんだろうけど、間が悪い。これは mysql2 gem がせっかちさんということでいいのかな。

以下、 adapter 変更も含めた MySQL を使う app の初期設定の流れ。先頭が # の command は root で、 > はそれ以外の user で打つ。

まず mysql-ruby adapter の install から。めんどくさいので root で直接 gem 叩いて system に install しちゃうけど Bundler 使うのでもおk。

  1. # yum install mysql-devel
  2. # gem install mysql-ruby

次、実際の app の adapter を変更するところまで。

  1. > rails new appname -d mysql
    • MySQL を使うよう Rails に指示して app を作成する。
  2. > cd appname
  3. > sed -i -e 's/mysql2/mysql/' Gemfile
    • Gemfile に mysql2 でなく mysql-ruby を利用すると書く。
  4. > sed -i -e 's/mysql2/mysql/g' config/database.yml
    • database 接続のための設定も mysql2 の代わりに mysql-ruby を利用するということにする。
  5. > bundle check

これで MySQL につなぐことができるはず。

最後に MySQL に接続する user を変更する。 root のまま access するのはいろいろ危ない。以下 "appname" という user で "password" という password を使って接続する例。 先に database と user だけ手動で作ってしまう。先頭が $ の command は mysql client で打ち込む SQL ね。

  1. > mysql -u root -p
  2. $ CREATE DATABASE appname_development;
  3. $ CREATE DATABASE appname_test;
  4. $ CREATE DATABASE appname_production;
  5. $ GRANT ALL ON appname_development.* TO appname@localhost IDENTIFIED BY 'password';
  6. $ GRANT ALL ON appname_test.* TO appname@localhost IDENTIFIED BY 'password';
  7. $ GRANT ALL ON appname_production.* TO appname@localhost IDENTIFIED BY 'password';
  8. $ quit
  9. > sed -i -e 's/root/appname/g' config/database.yml
    • "appname" という user で MySQL につなぐ設定
  10. > sed -i -e '/password:/s/:/: password/g' config/database.yml
    • "password" という password を使ってねという設定

終了。