前提
- develop環境でsqliteを使うと、production環境(AWS)への移行が面倒そうなので、mysqlに変更しようと思った(本番はmysqlを使いたいから)
- まだ1度も
db:migrateしていない状態から作業した - そもそも
rails new アプリ名 -d mysqlでデフォルトのDBをmysqlにできる - ruby "3.1.2"
- rails "7.0.3.1"
- M1MacBookPro
最初の躓きポイント
- Gemfileからsqlite3を消し、mysql2を追加して
bundle installでエラー ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)- 原因はmysqlをPCにインストールしてなかったこと
- homebrewでmysqlをインストールしたらパス
次の躓きポイント
- config/database.ymlをmysql用に書き直す
- 具体的には、
rails new アプリ名 -d mysqlで別のアプリを作って、そのdatabase.ymlをコピーした -
mysql -u rootでエラー ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)- 原因はmysqlを起動していなかったこと
- mysql.server start(終了時はstart→stop)
-
mysql -u rootでsqlに接続
3つ目の躓きポイント
-
create user ユーザー名@localhost identified by 'パスワード';でユーザーを作成 - ちなみにSQLで文末に
;をつけ忘れると=>が出てくるので;を打つと通る -
quitでmysqlを抜けて、database.ymlにユーザー名とパスワードを入れ、rails db:createでエラー - 原因は作ったユーザーに権限がないこと
- 作ったユーザーでmysqlに接続
- 作ったユーザーに権限を与えようとするとエラー
- 原因は新しいユーザーには、権限を付与する権限もないこと
- rootで接続して、作ったユーザーに権限を与えることができる
-
rails db:createとrails db:migrateがパス -
rails sでlocalhostで確認して問題なし
結論
これだけのことに2時間以上費やした。最悪すぎる。以下がポイント。
- そもそもPCにmysqlを入れたか
-
mysql.server startで起動したか - rootでユーザー権限を付与したか