RailsのDBをSQLiteからMySQLにする

Railsの標準DBはsqliteになってます。
SQ”Lite”ってぐらいですし、ちょっと大規模なものを作ろうとすると不安になりますよね。
そこで、より大規模になっても安心なMySQLに切り替えてみます。その手順。

まずMySQLを入れる

そもそも手元のMacにMySQLを入れてなかったので入れちゃいましょう。
http://www.mysql.com/downloads/
ここの「MySQL Community Server」から自分のPCにあったものをDL。(DLするにはmySQLのためにサイトで無料アカウントを作る必要があります。)
Dlしたものの中からmysql-5.5.24-osx10.6-x86_64.pkg的なのを実行してインストールします

インストールしたら起動しちゃいましょう。MySQL.prefPaneというのが上の画像に見えますよね。
それをダブルクリックすると設定からMySQLをいじれるようになります。こんな感じに

その他にあるMySQLを押すと下のような画面になります。まず start MySQL Serverを押しましょう。
そして runnningになったらOKです!
Mac起動時にMySQLを動かすにはAutomatically start mysql server on startup にチェックを入れます。

最後にbashprofileを編集します。シェルから mysqlとか打つだけで使えるようにするためです。
ホームフォルダの隠しファイルである「.bash_profile」を開いて

export PATH=$PATH:/usr/local/mysql/bin

と追記して保存。シェルから

source ~/.bash_profile

を打って反映させます。これでOK! mysqlと打って起動すれば問題ありません。
rootアカウントをパスワード込みで作っちゃいましょう

Railsで使うDBをつくる

SQLiteならConfig/database.yamlに正しい設定をするだけで***.sqliteのDBが作成されます。
が、MySQLは自分でDBを作る必要があります(多分)
ということで作っちゃいましょう

[shell]
mysql -u root -p
[/shell]

でパスワードを入力して入ります。そしてdevelopment用のDBを作り新しいアカウントにGRANTで権限を渡しましょう。
db: test_development
username: test
password: testpassword
としてこんなSQL文

[sql]

create database test_development default character set utf8 collate utf8_unicode_ci;
grant all on test_development.* to ‘test’@’localhost’;
set password for ‘test’@’localhost’ = password(‘testpassword’);

[/sql]

これで test_developmentというDBができ、testユーザーがフルアクセスできる環境となりました。
あとはRailsでこのDBを使うように変更します

Railsの設定をする

やることは2つ gemfileにsqliteじゃなくてmysqlを使うように変更する。
database.yamlにmysqlとの接続設定をする。

まずgemfileを編集しましょう。

gem ‘sqlite3’

となってるところを

gem ‘mysql2′

に変更して保存。これだけ。

次に、接続設定。Railsのプロジェクトにあるgemfileを開くと各環境においてこんな風に
なってるはず。

[ruby]
development:
adapter: sqlite3
database: db/development.sqlite3
pool: 5
timeout: 5000
[/ruby]

これを、こんな風にします。

[ruby]

development:
adapter: mysql2
database: test_development
username: test
password: testpassword
host: 127.0.0.1   encoding: utf8
[/ruby]

これでOK!試しにscaffoldやったところ。。。エラー。

[shell]

/Users/tokotoko/.rvm/gems/ruby-1.9.2-p318/gems/mysql2-0.3.11/lib/mysql2.rb:9:in `require’: dlopen(/Users/tokotoko/.rvm/gems/ruby-1.9.2-p318/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib (LoadError)

[/shell]

こんなエラー。どうやらmysqlがみつかんないのかな。
解決策としては bash_profileに

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

これを追加してリロード。これで動きました!
scaffoldして rake db:migrate(これを忘れない) してrails sしてみましょう。動くはずです。

今回はdevelopmentだけですが、他の環境もDB作成から接続設定まで必要、
また、サーバーにDeployするなら向こうの設定も必要ですね。
以上です!

まとめ

・RailsでMySQLを使う場合dbを作成してアカウントにGRANTしておく
・Railsのgemfileでsqliteをmysql2に変更
・Railsのdatabase.yamlで接続設定をする

コメントを残す