Ruby: Rails アプリで MySQL データベースを使うときの初期設定

Rails アプリを MySQL でやるには config/database.yml で設定するが、一からなら下記のワンライナー。

$ rails new bbs -d mysql

-d オプションで mysql を指定する。

$ rails g scaffold User name:string

User クラスを取りあえずスキャフォールド。

$ rails server

実行して localhost:3000 アクセスしてみると以下のエラーが出てしまう。

Mysql2::Error
Access denied for user 'root'@'localhost' (using password: NO)

Rails アプリ作りたてでアクセスしてみた状態。
MySQL にパスワードなし root ユーザーでつなぎに行っていて、拒否されている。

MySQL サーバーに入って、ちゃんと Rails アプリ向けの設定をする。

$ mysql -u root -p
mysql> create database bbs_dev;
Query OK, 1 row affected (0.00 sec)
 
mysql> GRANT ALL PRIVILEGES ON bbs_dev.* TO testuser@localhost IDENTIFIED BY 'testpassword' WITH GRANT OPTION;

bbs_dev データベースを作成し、
testuser ユーザー、testpassword パスワードでのアクセスを許可する。

次に Rails アプリからの接続設定をする。

$ vi config/database.yml
development:
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: testuser
  password: testpassword
  socket: /tmp/mysql.sock
  database: bbs_dev

testuser ユーザー、testpassword パスワードで bbs_dev データベースに繋ぐようにした。
$ rake db:migrate して完了。

$ rake db:migrate RAILS_ENV=development

localhost:3000/users が正しく動作するか目視確認。