🐙

rails db: Commandおさらい

2022/04/12に公開

よく使う(見る、覚えておいた方が良い)Migrateをおさらいしておく

個人的な偏見です。
ただただ、雰囲気でやってたので、そろそろ認識を改めようかと...。
全部確認したい場合にはこちらが見易かったです。
オプションも色々とあるので、リンク先の方が良いかなと。
https://railsdoc.com/migration
https://railsdoc.com/rails

rails db:HOGEHOGE 関連

rails db:drop

いきなりかーいという感じですが、とりあえず手元を綺麗にしたかったので...。
すでに存在している database を 削除 します

% rails db:drop   
Dropped database 'rails_association_development'
Dropped database 'rails_association_test'
% 
  • 実行前
mysql> show databases;
+-------------------------------+
| Database                      |
+-------------------------------+
| information_schema            |
| mysql                         |
| performance_schema            |
| rails_association_development |
| rails_association_test        |
| sys                           |
+-------------------------------+
6 rows in set (0.01 sec)
  • 実行後
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

rails db:create

普通はこれが最初ですよね。

% rails db:create
Created database 'rails_association_development'
Created database 'rails_association_test'
% 
  • 実行前
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)
  • 実行後
mysql> show databases;
+-------------------------------+
| Database                      |
+-------------------------------+
| information_schema            |
| mysql                         |
| performance_schema            |
| rails_association_development |
| rails_association_test        |
| sys                           |
+-------------------------------+
6 rows in set (0.01 sec)

rails db:reset と rails db:migrate:reset

上記二つを組み合わせたもの。との認識合わせて migrate も実行したい場合には
rails db:migrate:reset (resetしてから、migrateの順番)となる。

% rails db:migrate:reset                            
Dropped database 'rails_association_development'
Dropped database 'rails_association_test'
Created database 'rails_association_development'
Created database 'rails_association_test'
== 20220227085625 CreateUsers: migrating ======================================
-- create_table(:users)
   -> 0.0188s
== 20220227085625 CreateUsers: migrated (0.0189s) =============================

% 

rails db:migrate:status

現在どこまでの migrate が完了しているかを確認する
up: 適応済み
down: 未適応

% rails db:migrate:status

database: rails_association_development

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20220227085625  Create users
  down    20220321094237  Create posts
  down    20220412122316  Create groups
  down    20220412135254  Create group members

% 

rails db:migrate [VERSION]

指定の migrate のみを実行したい

% rails db:migrate:status

database: rails_association_development

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20220227085625  Create users
  down    20220321094237  Create posts
  down    20220412122316  Create groups
  down    20220412135254  Create group members


% rails db:migrate VERSION=20220321094237
== 20220321094237 CreatePosts: migrating ======================================
-- create_table(:posts)
   -> 0.0232s
-- add_index(:posts, [:user_id, :created_at])
   -> 0.0232s
== 20220321094237 CreatePosts: migrated (0.0466s) =============================

% rails db:migrate:status                

database: rails_association_development

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20220227085625  Create users
   up     20220321094237  Create posts
  down    20220412122316  Create groups
  down    20220412135254  Create group members

% 

備考

  • ActiveRecord::NoEnvironmentInSchemaError が出た時
  • uninitialized constant MIGRATE_FILE_NAME が出た時
    • 定義ファイルがおかしいので見直しましょう。
    • 自分は一個づつ migrate の実行結果を MySQL Console で確認しつつやりたいなーと、思って一旦全部コメントアウトしたら出ました。
    • migrate file name に則ったファイルがあると怒られます...。
    • (komment.rbという名前にしたら出なくなった)
    # class CreatePosts < ActiveRecord::Migration[7.0]
    #   def change
    #     create_table :posts do |t|
    #       t.text :content
    #       t.references :user, null: false, foreign_key: true
    #
    #       t.timestamps
    #     end
    #     add_index :posts, [:user_id, :created_at]
    #   end
    # end
    

Discussion