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で接続設定をする