[Rails][MySQL] RailsでMySQLを使う
Ruby on Rails で普通にプロジェクトを作成すると sqlite3 が使われるようになっていますが、mysql を使用するにはプロジェクト作成時に -d オプションで mysql を指定します。
sh>>
$ rails new turntable_test -d mysql
create
create README.rdoc
create Rakefile
create config.ru
create .gitignore
create Gemfile
create app
create app/assets/javascripts/application.js
create app/assets/stylesheets/application.css
create app/controllers/application_controller.rb
create app/helpers/application_helper.rb
create app/views/layouts/application.html.erb
create app/assets/images/.keep
create app/mailers/.keep
create app/models/.keep
create app/controllers/concerns/.keep
create app/models/concerns/.keep
create bin
create bin/bundle
create bin/rails
create bin/rake
create config
create config/routes.rb
create config/application.rb
create config/environment.rb
create config/environments
create config/environments/development.rb
create config/environments/production.rb
create config/environments/test.rb
create config/initializers
create config/initializers/backtrace_silencers.rb
create config/initializers/filter_parameter_logging.rb
create config/initializers/inflections.rb
create config/initializers/mime_types.rb
create config/initializers/secret_token.rb
create config/initializers/session_store.rb
create config/initializers/wrap_parameters.rb
create config/locales
create config/locales/en.yml
create config/boot.rb
create config/database.yml
create db
create db/seeds.rb
create lib
create lib/tasks
create lib/tasks/.keep
create lib/assets
create lib/assets/.keep
create log
create log/.keep
create public
create public/404.html
create public/422.html
create public/500.html
create public/favicon.ico
create public/robots.txt
create test/fixtures
create test/fixtures/.keep
create test/controllers
create test/controllers/.keep
create test/mailers
create test/mailers/.keep
create test/models
create test/models/.keep
create test/helpers
create test/helpers/.keep
create test/integration
create test/integration/.keep
create test/test_helper.rb
create tmp/cache
create tmp/cache/assets
create vendor/assets/javascripts
create vendor/assets/javascripts/.keep
create vendor/assets/stylesheets
create vendor/assets/stylesheets/.keep
run bundle install
Enter your password to install the bundled RubyGems to your system:
Fetching gem metadata from https://rubygems.org/...........
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
Using rake (10.1.0)
Installing i18n (0.6.9)
Using minitest (4.7.5)
Using multi_json (1.8.2)
Using atomic (1.1.14)
Using thread_safe (0.1.3)
Using tzinfo (0.3.38)
Using activesupport (4.0.1)
Using builder (3.1.4)
Using erubis (2.7.0)
Using rack (1.5.2)
Using rack-test (0.6.2)
Using actionpack (4.0.1)
Installing mime-types (1.25.1)
Using polyglot (0.3.3)
Using treetop (1.4.15)
Using mail (2.5.4)
Using actionmailer (4.0.1)
Using activemodel (4.0.1)
Using activerecord-deprecated_finders (1.0.3)
Using arel (4.0.1)
Using activerecord (4.0.1)
Using bundler (1.3.5)
Using coffee-script-source (1.6.3)
Using execjs (2.0.2)
Using coffee-script (2.2.0)
Using thor (0.18.1)
Using railties (4.0.1)
Using coffee-rails (4.0.1)
Using hike (1.2.3)
Installing jbuilder (1.5.3)
Using jquery-rails (3.0.4)
Using json (1.8.1)
Installing mysql2 (0.3.14)
Using tilt (1.4.1)
Installing sprockets (2.10.1)
Using sprockets-rails (2.0.1)
Using rails (4.0.1)
Using rdoc (3.12.2)
Using sass (3.2.12)
Using sass-rails (4.0.1)
Using sdoc (0.3.20)
Installing turbolinks (2.0.0)
Installing uglifier (2.3.2)
Your bundle is complete!
Use bundle show [gemname] to see where a bundled gem is installed.
<<--
オプションなしでプロジェクトを作成したときとの違いは、作成時の出力で下記のように示されている通り、mysqlのgemが使用されます。
sh>>
Installing mysql2 (0.3.14)
<<--
また、sqlite3は使用されなくなるので、下記のようなsqlite3に関する出力はなくなります。
sh>>
Using sqlite3 (1.3.8)
<<--
作成される config/database.yml の差分は下記の通りです。
diff>>
$ diff test_app/config/database.yml turntable_test/config/database.yml
1,2c1
< # SQLite version 3.x
< # gem install sqlite3
MySQL. Versions 4.1 and 5.0 are recommended.
4,5c3,10
< # Ensure the SQLite 3 gem is defined in your Gemfile
< # gem 'sqlite3'
Install the MYSQL driver
gem install mysql2
Ensure the MySQL gem is defined in your Gemfile
gem 'mysql2'
And be sure to use new-style password hashing:
http://dev.mysql.com/doc/refman/5.0/en/old-client.html
7,8c12,14
< adapter: sqlite3
< database: db/development.sqlite3
adapter: mysql2
encoding: utf8
database: turntable_test_development
10c16,18
< timeout: 5000
username: root
password:
socket: /tmp/mysql.sock
16,17c24,26
< adapter: sqlite3
< database: db/test.sqlite3
adapter: mysql2
encoding: utf8
database: turntable_test_test
19c28,30
< timeout: 5000
username: root
password:
socket: /tmp/mysql.sock
22,23c33,35
< adapter: sqlite3
< database: db/production.sqlite3
adapter: mysql2
encoding: utf8
database: turntable_test_production
25c37,39
< timeout: 5000
username: root
password:
socket: /tmp/mysql.sock
<<--
sqlite3 の設定が mysql 用の設定に変更されているのがわかります。username, password などは適宜変更します。
binstubsを実行してから、rake でDBを作成します。
sh>>
$ bundle --binstubs
$ bin/rake db:create
<<--
mysqlにログインしてDBが作成されていることを確認します。
sql>>
mysql> show databases;
+----------------------------+
| Database |
+----------------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| turntable_test_development |
| turntable_test_test |
+----------------------------+
6 rows in set (0.00 sec)
<<--
動作確認用のサンプルとしてUserModelを作成します。
sh>>
$ bin/rails generate model User name:string email:string
invoke active_record
create db/migrate/20131211224446_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml
<<--
migrate を実行してDBにテーブルを作成します
sh>>
$ bin/rake db:migrate
== CreateUsers: migrating ====================================================
-- create_table(:users)
-> 0.0110s
== CreateUsers: migrated (0.0111s) ===========================================
<<--
下記のようにテーブルが作成されていれば成功です。
sh>>
mysql> desc users;
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| email | varchar(255) | YES | | NULL | |
| created_at | datetime | YES | | NULL | |
| updated_at | datetime | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
<<--