LoginSignup
1
0

More than 3 years have passed since last update.

Rails6 のちょい足しな新機能を試す108(multi-db abort_if_pending_migrations編)

Posted at

はじめに

Rails 6 に追加された新機能を試す第108段。 今回は、 multi-db abort_if_pending_migrations 編です。
Rails 6 では、 rails db:abort_if_pending_migrations が multi database に対応しました。

Ruby 2.6.5, Rails 6.0.0 で確認しました。 (Rails 6.0.1 がリリースされていますが、確認した時点ではリリースされていませんでした。)

$ rails --version
Rails 6.0.0

今回は、簡単なスクリプトを作って確認します。

Rails プロジェクトを作成する

$ rails new rails_sandbox
$ cd rails_sandbox

今回は複数のDBを作って、それぞれ、 User と Book のCRUD を作ってから、 rails db:abort_if_pending_migrations を実行して確認します。

config/database.yml を編集する

config/database.yml を編集して複数データベースにします。

config/database.yml
...
development:
  backbone:
    <<: *default
    database: backbone_development
  library:
    <<: *default
    database: library_development
    migrations_paths: db/library_migrate
...

User の CRUD を作成する

User の CRUD を作成します。

$ bin/rails g scaffold User name

Book の CRUD を作成する

Book の CRUD を作成します。

$ bin/rails g scaffold Book title --db library

Book モデルを編集する

データベースの接続先を library に変更します。

app/models/book.rb
class Book < ApplicationRecord
  connects_to database: { writing: :library, reading: :library }
end

マイグレーションを実行する

$ bin/rails db:create db:migrate

rails server を実行する

別に実行しなくても良いのですが、別の事象に遭遇したので、ここで実行します。

$ bin/rails s

マイグレーションを作成する

rails server を実行したのとは、別のコンソールから、books に published_at カラムを追加するマイグレーションを作成します。

$ bin/rails g migration add_published_at_to_books published_at:datetime --db library

db:abort_if_pending_migrations を実行する

rails db:abort_if_pending_migrations を実行すると、ちゃんと rails db:migrate を実行しろとメッセージが出ます。

$ rails db:abort_if_pending_migrations
You have 1 pending migration:
  20191022023755 AddPublishedAtToBooks
Run `rails db:migrate` to update your database then try again.

ブラウザでアクセスする

どういう訳か、http://localhost:3000/users または、 http://localhost:3000/books にブラウザからアクセスしても ActiveRecord::PendingMigrationError になりませんでした。
予想と違ったので、 Issue として報告 しておきました。

試したソース

試したソースは以下にあります。
https://github.com/suketa/rails_sandbox/tree/try108_multi_db_pending

参考情報

1
0
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
1
0