ローカル開発環境のModelデータをコンソールで書き換える(Rails)
ローカル開発環境で登録されたデータを書き換えたかったので備忘録として書く。
変更したいModelのテーブルを見る
- DBを操作するためにコンソールを起動する
% rails dbconsole
するとプロンプトがかわりSQLを叩けるようになる
development=#
- SQLを叩いて見たいModelとカラムを出す
今回はproducts
テーブル(モデル)のcreated_at
とupdated_at
を変更したいので
id
を含めてテーブルを出力する
development=# select id,created_at,updated_at from products; id | created_at | updated_at ------------+----------------------------+---------------------------- 1033498682 | 2021-02-11 21:19:28.377342 | 2021-02-19 05:16:38.259334 1033498689 | 2021-02-16 06:02:34.481795 | 2021-02-19 06:21:35.591053 1033498684 | 2021-02-15 10:05:29.429805 | 2021-02-19 07:55:34.359815 1033498703 | 2021-02-22 05:19:27.567242 | 2021-02-22 05:19:27.729664 1033498704 | 2021-02-22 05:26:57.909896 | 2021-02-22 05:26:57.922758 1033498681 | 2021-02-09 01:04:37.932581 | 2021-02-09 01:04:37.932581 1033498649 | 2021-01-28 08:00:30.830522 | 2021-02-14 06:56:01.74118 1033498698 | 2021-02-16 06:19:37.667765 | 2021-02-17 05:04:01.551797 1033498696 | 2021-02-16 06:19:19.166006 | 2021-02-17 05:04:04.504286 1033498695 | 2021-02-16 06:19:04.007454 | 2021-02-17 05:05:13.466765 1033498694 | 2021-02-16 06:18:18.464509 | 2021-02-17 05:05:14.955893 1033498693 | 2021-02-16 06:18:06.320066 | 2021-02-17 05:05:15.903362 1033498691 | 2021-02-10 21:03:00.05267 | 2021-02-10 21:03:00.05267 1033498690 | 2021-02-13 21:03:00.05267 | 2021-02-13 21:03:00.05267
この表を確認しながら次の作業で変更していく
DBのデータを変更する
続いて
- データを変更するためにRailsのコンソールに切り替える
% rails console
叩くと以下のようにirbが起動する
Loading development environment (Rails 6.0.3.4) irb(main):001:0>
- 変更したいレコードをローカル変数に格納する
findメソッドで先ほどのテーブルのid
(変更したいレコードのid)を引数に入れる
irb(main):001:0> product = Product.find(1033498682) => #<Product id: 1033498682, practice_id: 363506445, user_id: 253826460, body: "fdafdadsf", created_at: "2021-02-11 21:19:28", updated_at: "2021-02-19 05:16:38", wip: false, published_at: "2021-02-11 21:19:28", checker_id: 679998234>
created_at
フィールドとupdated_at
フィールドを変更する
updateメソッドで変更したい値を指定して変更する
irb(main):002:0> product.update(created_at: "2021-02-10 21:19:28.377342", updated_at: "2021-02-10 21:19:28.377342") => true
trueで変更完了 - テーブルを確認すると変更されているはず
development=# select id,created_at,updated_at from products; id | created_at | updated_at ------------+----------------------------+---------------------------- 1033498682 | 2021-02-10 21:19:28.377342 | 2021-02-10 05:16:38.259334 1033498689 | 2021-02-16 06:02:34.481795 | 2021-02-19 06:21:35.591053 1033498684 | 2021-02-15 10:05:29.429805 | 2021-02-19 07:55:34.359815 1033498703 | 2021-02-22 05:19:27.567242 | 2021-02-22 05:19:27.729664 1033498704 | 2021-02-22 05:26:57.909896 | 2021-02-22 05:26:57.922758 1033498681 | 2021-02-09 01:04:37.932581 | 2021-02-09 01:04:37.932581 1033498649 | 2021-01-28 08:00:30.830522 | 2021-02-14 06:56:01.74118 1033498698 | 2021-02-16 06:19:37.667765 | 2021-02-17 05:04:01.551797 1033498696 | 2021-02-16 06:19:19.166006 | 2021-02-17 05:04:04.504286 1033498695 | 2021-02-16 06:19:04.007454 | 2021-02-17 05:05:13.466765 1033498694 | 2021-02-16 06:18:18.464509 | 2021-02-17 05:05:14.955893 1033498693 | 2021-02-16 06:18:06.320066 | 2021-02-17 05:05:15.903362 1033498691 | 2021-02-10 21:03:00.05267 | 2021-02-10 21:03:00.05267 1033498690 | 2021-02-13 21:03:00.05267 | 2021-02-13 21:03:00.05267
カラム修飾子を追加したマイグレーションがロールバックできないとき
% rails db:rollback
したらエラーが出てrollbackできなかったので修正方法を書く。
rollbackコマンド後のエラーはこんな感じ
This migration uses change_column, which is not automatically reversible. To make the migration reversible you can either: 1. Define #up and #down methods in place of the #change method. 2. Use the #reversible method to define reversible behavior.
rollbackする手順
(1)メソッド名のchangeをupにする
- 修正前のマイグレーションファイル
def change change_column :reports, :emotion, :integer, default: 2, null: false end # 修正↓ def up change_column :reports, :emotion, :integer, default: 2, null: false end
(2)rails db:rollback
を実行する
これでロールバックされdownの状態になる
rails db:migrate:status
で確認する
一番したのマイグレーションがdownになった
(3) マイグレーションファイルを書き換える
upは書けているので、downでupの逆のことを書けばOK
def up change_column :reports, :emotion, :integer, default: 2, null: false end def down change_column :reports, :emotion, :integer, default: nil, null: true end
最後にrails db:migrate
でupにすれば完成
ローカルでのいろいろ差分確認(GitHub)
忘れたときのメモです。
add前
% git diff
add後commit前
% git diff --cached
commit後push前
開発ブランチをpushしたことがある場合
(origin/[開発ブランチ]がある場合)
# git log origin/[開発ブランチ]..[開発ブランチ]
まだ一度も開発ブランチをpushしたことがない場合
((origin/[開発ブランチ]がない場合)
# git log origin/main..[開発ブランチ]
最新のコミットのみの変更
# git diff HEAD^
add前とcommit前など
% git status # commit前 Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: foo.txt # add前 Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: baz.txt # Git管理されていない、かつ .gitignore で管理除外対象にもされていないものの一覧 Untracked files: (use "git add <file>..." to include in what will be committed) .gitignore
特定のコードが書かれたファイルを検索する
カレントディレクトリ以下から、特定のコードが書かれているファイルを検索したいときの方法について
def foo
を探したい場合
% find . -name "*" -type f | xargs grep "def foo"
grep
の後の文字を変えることで検索できます
マッチしたファイルを全て吐き出してくれます
前の開発ブランチのコミットも一緒にコミットされていたとき
ブランチを切った時にmasterからではなく、他の開発ブランチ(今までいた開発ブランチ)からブランチを切ってしまったときにpushすると、コミットが前のブランチのコミットも一緒にコミットされてしまいます。どうやって解決したか書きたいと思います。
状況
- Fooブランチ開発してPR作成
- AとBというコミットがPushされている
- BarブランチをFooブランチから切って開発してPR作成
- CとDというコミットだけをPushしたが コミットは4つある(ABCDの順で)
解決方法
- Fooブランチがmain(master)にマージされたら、ローカルのmainを
git pull
する - Barブランチをにて、
git rebase main
を実行する - その後、Barブランチで
git push origin +Bar
で強制プッシュする - BarブランチのPRを見るとコミットがCとDだけになっている
あっさりと解決しました。rebase -i
やrevert
やreset
を使うか迷いましたがよかったです!
過去にプッシュしたコミットのコミットメッセージを変更したい
現在、システム開発のプラクティスを進めています。フィヨルドブートキャンプのアプリの仕様はコミットメッセージは日本語で書くことになっています。しかし私は普段の癖で英語で書いてしまい、修正しなくてはいけなくなりました。そこで、どのコミットであってもコミットメッセージを変更できる方法を書きたいと思います。
状況
- 自分だけの開発ブランチで開発中
- コミットは2回、プッシュ済
- 1回目のコミットメッセージを変更したい
方法
rebase -i
を使うことでいつのコミットでも変更できます
実際の手順
戻りたいコミットまで戻る
以下の例だと2つ前までのコミットの状況を見られます
数字は戻りたいところまで数字を指定します
% git rebase -i HEAD~2
すると画面が切り替わリマス この画面はアクションを指定します
pick b5df9e8 add aaa => e b5df9e8 add aaa pick 2cc06c4 bbb追加 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
この画面の上の2行がコミット履歴
一番最初のコミットを変更したいのでpick
をe
またはedit
に変更して :wq
で終了
すると画面が切り替わります ここは次の手順が書かれています
% git rebase -i HEAD~2 Stopped at b5df9e8... add aaa You can amend the commit now, with git commit --amend Once you are satisfied with your changes, run git rebase --continue
まず、コミットメッセージを変更します 以下のコマンドを叩きます
% git commit --amend
先ほど指定したコミットのメッセージが出ているので書き換えます
add aaa => aaa追加 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:wq
で保存すると以下のようになります
% git commit --amend [detached HEAD fa6040a] aaa追加 Date: Fri Jan 15 15:52:18 2021 +0900 1 file changed, 1 insertion(+) create mode 100644 aaa.txt
そしたら、以下コマンドで、rebaseを実行し編集を終了させます
% git rebase --continue Successfully rebased and updated refs/heads/aaa.
最後に強制プッシュします
% git push origin +branch
GitHubでコミットを見るとコミットメッセージが変わっているはずです。