follow us in feedly

2012年8月

rake db:createコマンドのデータベース作成時の動作について

前回の記事では下記の手順でデータベースを作成していました。
1. MySQLでユーザを作成
2. config/database.ymlに設定を記述
3. rake db:createコマンドを実行

ですが、ユーザを作成していなくてもrakeコマンドはデータベースを作成します。
ユーザが存在しない場合、rakeコマンドはデータベース作成時にユーザも作成するわけです。

ためしにやってみます。
前回の「MySQLユーザの作成」をとばして、config/database.ymlに設定を追加します。

development:
  …
  username: testuser
  password: testpass
  …
test:
  …
  username: testuser
  password: testpass
  …

rake db:createコマンドを実行すると、下記のようにMySQLのrootパスワードを聞いてきます。

$ rake db:create
Access denied for user 'testuser'@'localhost' (using password: YES).
Please provide the root password for your mysql installation
>

MySQLのrootパスワードを入力するとデータベースが作成されます。
このときにユーザを作成して、データベースへの権限も付けています。

データベース作成時のクエリを出してみました。
WITH GRANT OPTIONは他のユーザに自分と同じ権限を与えられるみたいです。
ここでは、rails_app_development のすべての権限かな。

CREATE DATABASE `rails_app_development` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`
GRANT ALL PRIVILEGES ON rails_app_development.* TO 'testuser'@'localhost' IDENTIFIED BY 'testpass' WITH GRANT OPTION

ただし、MySQLのユーザが存在していてもrootパスワードを聞かれることがあります。
config/database.ymlに記述したパスワードが間違っている場合です。
この場合もrootパスワードを入力するとデータベースが作成されますが、このときにMySQLのユーザのパスワードが間違ったものに書き換わってしまうので注意してください。

意図せずrootパスワードを聞かれた場合は、中断(Ctrl-C)して設定を確認したほうがよさそうです。

Rails 3.2とMySQLでアプリケーションを作成する

前回の記事(1ヶ月以上も前…)で Rails 3.2 の開発環境を構築しました。
ここから、少しずつでもいいのでアプリケーションを作っていきたいですね。
とりあえず、Rails と MySQL でアプリケーションの基礎構築までやってみました。
途中までは前回と同じような内容です。

サーバ環境や Rails 環境の構築は下記あたりを参考にしてください。
さくらVPS に nginx + WordPress の環境を構築する(1) – SSH の設定 | 77 Dogs Blog
さくらVPSに Rails 3.2 の開発環境を構築する | 77 Dogs Blog

Rails アプリを作成する

Rails アプリを作成して、アプリのディレクトリに移動します。
MySQLを使うためのオプションをつけて作成します
–skip-bundle オプションをつけると「bundle install」が実行されなくなります。

$ rails new rails_app -d mysql --skip-bundle
$ cd rails_app

作成されたディレクトリに移動して、Gemfile に下記を追加します。
下記を追加しないと Rails コンソールの起動やデータベース作成時に Javascript ランタイムエラーが出ます。

gem 'execjs'
gem 'therubyracer'

bundle install を実行して gem をインストールします。
-–path オプションでインストール先を指定できます。パスの指定は初回だけで大丈夫です。

$ bundle install --path vender/bundle

MySQL ユーザを作成する

MySQL のユーザを作成し、データベースを操作するための権限を設定します。

$ mysql -u root -p
Enter password:

mysql> CREATE USER 'testuser'@'localhot' IDENTIFIED BY 'testpass';
mysql> GRANT ALL ON rails_app_development.* TO 'testuser'@'localhost';
mysql> GRANT ALL ON rails_app_test.* TO 'testuser'@'localhost';

データベースを作成する

アプリで使用するデータベースを作成します。
まずは、config/database.yml に下記を追加します。

development:
  …
  username: testuser
  password: testpass
  …
test:
  …
  username: testuser
  password: testpass
  …

下記コマンドを実行して、データベースを作成します。
config/database.yml に定義した development と test のデータベースが作成されます。

$ rake db:create

以上で、Rails と MySQL を使ったアプリケーションが作成できました。

補足1: production のデータベースを作成する

production のデータベースを作成する場合は、config/database.yml の production: 以下を編集します。

production:
  …
  username: testuser
  password: testpass
  …

RAILS_ENV=production オプションをつけて、コマンドを実行します。
production のデータベースのみ作成されます。

$ rake db:create RAILS_ENV=production

また、 下記コマンドを実行すると config/database.yml で設定したデータベースがすべて作成されます。

$ rake db:create:all

補足2: データベースを削除する

データベースを削除するには、下記コマンドを実行します。
オプションや all の意味は、rake db:create と同じです。

$ rake db:drop
$ rake db:drop RAILS_ENV=production
$ rake db:drop:all