LoginSignup
9
5

More than 3 years have passed since last update.

Rails6.0のマルチDBを試してみた

Last updated at Posted at 2019-06-03

Rails6.0で新たに追加されたマルチDBの機能を試してみました。

Railsのバージョン MySQLのバージョン
6.0.0.rc1 5.6.39

1. database.ymlspecificationを設定

マルチDBにおいて各DBを識別するための、specificationという概念が登場しています。specificationには、任意で好きな名前を設定できます。

config/database.yml
...
development:
  first:
    <<: *default
    database: rails6_development
  second:
    <<: *default
    database: rails6_development_second
    migrations_paths: "db/second_migrate"
...
test:
  first:
    <<: *default
    database: rails6_test
  second:
    <<: *default
    database: rails6_test_second
    migrations_paths: "db/second_migrate"
...

今回は、firstsecondという名前を設定しました。
specificationによってmigrateフォルダは分かれます。firstはデフォルトのdb/migrateフォルダが使われ、secondmigrations_pathsで指定したdb/second_migrateが使われます。

2. DB create

database.ymlの設定が完了したら、db:createを行います。
db:createの後ろにオプションでspecificationを指定することができます。
specificationを指定しない場合、firstsecond両方のDBが作られます。

2-1. firstだけの場合

$ rails db:create:first

2-2. secondだけの場合

$ rails db:create:second

2-3. 両方の場合

$ rails db:create

3. modelを作る

3-1. databaseオプション有りの場合

databaseオプションでspecificationを指定できます。

$ rails g model Post content:text posted_at:timestamp --database=first

以下1つのmigrateファイルができます。

db/migrate/20190529024126_create_posts.rb

3-2. databaseオプション無しの場合

$ rails g model User name:string age:integer

以下2つのmigrateファイルができます。

db/migrate/20190524025133_create_users.rb
db/second_migrate/20190524025133_create_users.rb

4. migrateする

4-1. migrate実行

$ rails db:migrate

4-2. migrateの状態を確認

$ rails db:migrate:status

specificationのmigrate状況が見れます。

database: rails6_development

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20190524025133  Create users
   up     20190529024126  Create posts


database: rails6_development_second

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20190524025133  Create users

5. modelで読み込み用と書き込み用のDBを分ける

connects_toオプションでwritingreadingを指定できます。

app/models/user.rb
  class User < ApplicationRecord
    connects_to database: { writing: :first, reading: :second }
  end

これで、Userモデルはfirstが書き込み用、secondが読み込み用となりました。

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5