rails new でDBMSにmysql使用しようとしたら失敗した時の解決メモ

## rails new アプリ名 -d mysql で発生した ERROR! The server quit without updating PID file

### やったこと

`$ rails new sample-app -d mysql`で新規プロジェクトを作成しようとした

### エラー

以下のエラーでプロジェクトの作成ができなかった

```
Starting MySQL
./usr/local/Cellar/mysql/8.0.19/bin/mysqld_safe: line 144: /usr/local/var/mysql/ユーザーMBP.err: Permission denied
rm: /usr/local/var/mysql/ユーザーMBP.pid: Permission denied
2020-03-29T03:04:45.6NZ mysqld_safe Fatal error: Can't remove the pid file:
/usr/local/var/mysql/ユーザーMBP.pid.
Please remove the file manually and start /usr/local/Cellar/mysql/8.0.19/bin/mysqld_safe again;
mysqld daemon not started
/usr/local/Cellar/mysql/8.0.19/bin/mysqld_safe: line 144: /usr/local/var/mysql/ユーザーMBP.err: Permission denied
 ERROR! The server quit without updating PID file (/usr/local/var/mysql/ユーザーMBP.pid).
```

### 調べたこと

- ERROR! The server quit without updating PID file
  - https://zenn.dev/endo/articles/24cad36f73626abbde67

### 試したこと(別エラー発生)

- mysqlに関連するファイルの権限を変更 → 再度`rails new` →別エラーでプロジェクト作成が中断される

  ```
  //mysql関連のファイル権限を変更する
  $sudo chown -R _mysql:_mysql /usr/local/var/mysql
  
  //railsアプリケーション再作成を試みる
  $rails new sample-app -d mysql
  # →さっきと違うエラーで作成が中断された(pidファイルが存在しないという旨のエラーが発生)
  ```



## rails new アプリ名 -d mysql で発生した ERROR! The server quit without updating PID file (/usr/local/var/mysql/*.local.pid).

### やったこと

`$ rails new sample-app -d mysql`で新規プロジェクトを作成しようとした

### エラー

mysql関連のファイルである pid ファイル が存在してない旨のエラー

### 調べたこと

- ERROR! The server quit without updating PID file (/usr/local/var/mysql/*.local.pid).
  - https://zenn.dev/endo/articles/24cad36f73626abbde67

### 試したこと

- pidファイルを作成 → `rails new` → pidファイルがないというエラーが続く

  ```
  //pidファイルを手動で作成
  $ /usr/local/var/mysql/mysql > touch /usr/local/var/mysql/自分のユーザー名.local.pid
  
  //railsアプリケーション再作成を試みる
  $ rails new sample-app -d mysql
  # →さっきと同じエラーで中断
  ```

- mysql関連のlocalファイルを削除 → mysql再インストール

  ```
  //localファイル削除
  $ sudo rm -rf /usr/local/mysql
  $ sudo rm -rf /Library/StartupItems/MYSQL
  $ sudo rm -rf /Library/PreferencePanes/MySQL.prefPane
  $ sudo rm -rf /Library/Receipts/mysql-.pkg
  $ sudo rm -rf /usr/local/Cellar/mysql*
  $ sudo rm -rf /usr/local/bin/mysql*
  $ sudo rm -rf /usr/local/var/mysql*
  $ sudo rm -rf /usr/local/etc/my.cnf
  $ sudo rm -rf /usr/local/share/mysql*
  $ sudo rm -rf /usr/local/opt/mysql*
  $ sudo rm -rf /usr/local/mysql*
  $ sudo rm ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
  $ sudo rm -rf /Library/StartupItems/MySQLCOM
  $ sudo rm -rf /Library/PreferencePanes/My*
  
  //MySQL再インストール
  $ brew install mysql
  ```

- mysqlサーバーの再起動

  - 上記でMySQL再インストール後に「MySQL起動しなきゃ」と思い、mysqlサーバー起動を試みる → **MySQLサーバー起動成功**

    ````
    //MySQLサーバースタート
    $ mysql.server start
    
    # → MySQLサーバー起動成功！
    ````

  

mysqlサーバーの起動に成功しプロジェクトの作成ができるようになったが...その後行う`rails db:create`で以下のエラーが発生



## rails db:create 時に発生した LoadError: dlopen...

### やったこと

```
$ rails new sample-app -d mysql //railsプロジェクト新規作成
$ cd sample-app                 //プロジェクト内に移動
$ rails db:create               //プロジェクトのデータベースを作成
# → ここで「LoadError: dlopen」...etc... 的なエラーが発生
```

### エラー

```
LoadError: dlopen(/Users/（ユーザー名）/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/mysql2-0.5.2/lib/mysql2/mysql2.bundle, 9): Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
  Referenced from: /usr/local/opt/mysql@5.6/lib/libmysqlclient.18.dylib
  Reason: image not found - /Users/（ユーザー名）/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/mysql2-0.5.2/lib/mysql2/mysql2.bundle
/Users/（ユーザー名）/projects/（アプリ名）/config/application.rb:7:in `<top (required)>'
/Users/（ユーザー名）/projects/（アプリ名）/Rakefile:4:in `require_relative'
/Users/（ユーザー名）/projects/（アプリ名）/Rakefile:4:in `<top (required)>'
/Users/（ユーザー名）/.rbenv/versions/2.5.1/bin/bundle:23:in `load'
/Users/（ユーザー名）/.rbenv/versions/2.5.1/bin/bundle:23:in `<main>'
(See full trace by running task with --trace)
```

### 調べたこと

- LoadError: dlopen(*): Library not loaded: *
  - https://qiita.com/kota-es/items/98ae6ee84fc59aaae2ea

### 試したこと(別エラー発生)

- brew upgradeでパッケージのアップグレードを試みる→xcrun関連のエラーでアップグレードが失敗

```
$ brew upgrade
# → xcrun関連のエラーが発生し、upgarede失敗
```



##  brew upgrade 時に発生した xcrun: error

### やったこと

`$ brew upgrade `

### エラー

```
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
```

### 調べたこと

- xcrun: error: invalid active developer path *
  - https://qiita.com/nishina555/items/e23d73067a5cac182a63

### 試したこと

- x-codeのツールの再インストール → その後 `brew upgrade`

```
//xcodeのインストール
$ xcode-select --install
  
//brew upgrade
$ brew upgrade
# → 成功
```



## エラーと解決まとめ

```
## railsアプリ作成時、DBMSをmysqlに指定しエラー ############################################
$ rails new sample-app -d mysql //pidファイルがないと言われmysqlエラーが発生する
【解決手順】
1. mysql関連ファイルの権限変更
2. mysql関連のlocalファイルの削除
3. mysqlの再インストールとmysqlサーバーの再起動 → これで解決！

## railsアプリ内での db createエラー ######################################################
$ rails new sample-app -d mysql //アプリ作成
$ cd sample-app                 //上記で作成したアプリのディレクトに移動
$ rails db:create               //LoadError: dlopen...的なエラーが発生しデータベース作成できず
【解決手順】
1. Homebrewの更新 (brew upgrade) → 新たに別のエラーが発生(xcrunエラー)

## brew upgrade 時の xcrun: error #######################################################
$ brew upgrade 						 //xcrunエラー発生
【解決手順】
1. xcodeの再インストール(xcode-select --install)
```



## その後...

mysqlの初期設定を行い、root以外のユーザーを作成。

無事に作成された`sample-app`内の`config/database.yml`を`sqlite`から`mysql`のものに変更し、`rails db:create`を実行 ...無事に通り、scaffold利用し`tweet`モデルを作成。

`rails db:migrate`後、`localhost:3000/tweets`に接続し動作を確認しようとしたところ...



**全く別のエラーに出くわすことになるのだった...**



「なぜだ...先ほどmysqlの再インストールをする前にsqliteのままscaffoldで作成したときは、ちゃんと表示されていたのに...！」



...



このエラーとの奮闘記が気になった方は[こちらへ]()どうぞ。(現在qiita投稿中...)



## 余談

この記事は各手順でそれぞれ別のエラーに見舞われており、全く同じ状況でエラーが発生している方も少ないのではと思っております。またその影響で一つ一つのエラー解決に対しては、見にくい記事になってしまったと反省もしております。



ただ全体を通して書き起こすことは自分にとってはためになるものだと実感しており、

自己満足の記事になることを、ご了承いただければ幸いです。



またこの記事を参考にしてくださる方がいらっしゃいましたら、

それぞれのエラーで「何が起きていて、どの部分が問題なのか」を調べていけると、問題の解決の糸口につながるかと思いますので、

この記事だけでおこなっている内容を鵜呑みにせず、公式ドキュメントや最新の記事を参照してみることも良いかと思います。



実は、[その後...](#その後)で発生したscaffold後のエラーについても今回のエラー解決で実行した`xcodeのインストール(xcode-select --install)`が原因でした...。

「何か一つが治ったらまた別の何かがエラーになる」なんてことは皆さん日常茶飯事だと思っておりますが、

その過程を記録することで「何が原因で、どのエラーが発生したのか」を把握することができるため、今後のエラー解決に役立つのでは感じております。



この記事が誰かのお役に立つ日が来れば幸いです。