前提
- 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でユーザー権限を付与したか