Rails初心者がアプリ構築でつまずいた時の３つのエラーと解決方法

普段はフロントエンドをしています。
あるプロジェクトでrailsを使ったアプリケーションを初めて作成することになりました。
エラーが起きまくりましたがやっと構築完了しましたので、つまずいた部分を残しておきたいと思います。

#エラー1　bundle installできない
Rubyをインストールし、プロジェクトフォルダ内でgem管理のためのbundlerをインストールする際のこと。
`bundle install --path vendor/bundler`すると

```
$ bundle install --path vendor/bundler
Errno::EACCES: Permission denied @ rb_sysopen -
/Users/***/***/vendor/bundler/ruby/2.5.0/gems/mysql2-0.5.2/CHANGELOG.md
An error occurred while installing mysql2 (0.5.2), and Bundler
cannot continue.
Make sure that ｀gem install mysql2 -v '0.5.2' --source 'https://rubygems.org/'｀
succeeds before bundling.
```
mysql2がないよとのエラーが。

エラー文で言われてる`gem install mysql2 -v '0.5.2'`してもだめ

Xcodeをアプデすればいけるよとの投稿を見つけたがだめ
`xcode-select --install`


さまよっていると下記の記事を発見。
[RailsプロジェクトでMySQLがbundle installできなかった](https://qiita.com/akito19/items/e1dc54f907987e688cc0)

```bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include"
```
パスがいけなかったみたいですね。これに関してはよくわかりません。

**とりあえずbundle installできました！**


#エラー２　mysqlが動かない

さあmysql動かしてローカルサーバ立ち上げようとした際。

```
$ mysql.server start
Starting MySQL
.rm: /tmp/mysql.sock: Permission denied
2019-02-22T12:54:00.6NZ mysqld_safe Fatal error: Can't remove the socket file:
/tmp/mysql.sock.
Please remove the file manually and start /usr/local/Cellar/mysql/8.0.12/bin/mysqld_safe again;
mysqld daemon not started
 ERROR! The server quit without updating PID file (/usr/local/var/mysql/***.pid).
```

・`/tmp/mysql.sock: Permission denied`
・`ERROR! The server quit without updating PID file (/usr/local/var/mysql/***.pid).`
上記の2エラーと思われるものが２つ登場。
調べてみると原因がいくつもある厄介なエラーだということが発覚。

###やったことその1
とりあえずインストールしなおせば治るでしょう。という安直な行動に

```
$ brew uninstall mysql
$ brew install mysql
```

だめだったので、var以下のmysqlもインストールしなおしました。

```
$ sudo rm -rf /usr/local/var/mysql
$ brew uninstall mysql
$ brew install mysql
```
いざ。

```
$ sudo mysql.server restart
Starting MySQL
 ERROR! The server quit without updating PID file (/usr/local/var/mysql/***.pid).

```

あかんでした。

###やったことその2
しっかり向き合おうととりあえずmysql.sockから。
権限がmysqlであるべきらしいので変更。

```
$ /tmp > $ sudo chown -R mysql:mysql mysql.sock
-rw-r--r--   1 _mysql  _mysql     0  2 22 21:25 mysql.sock
```
だが

```
$ sudo mysql.server restart
 ERROR! MySQL server PID file could not be found!
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/***.pid).
```
あかんでした。


###やったことその3

/usr/local/var/mysql以下のファイルの権限はmysqlであるべきとの投稿を見たので変更

```
$sudo chown -R _mysql:_mysql /usr/local/var/mysql
```

しましたがあかんでした。
これに関しては立ち上がってから確認したところ権限は
 [user名]  wheel
で問題ないみたいなのでやらなくて大丈夫かと思います。

###やったことその4
プロセスに変なのあるとダメらしいので確認

```
$ ps aux | grep mysql
***            5208   0.3  0.0  4899136   1732   ??  S     9 219    9:23.87 /usr/local/Cellar/mysql/8.0.13/bin/mysqld --basedir=/usr/local/Cellar/mysql/8.0.13 --datadir=/usr/local/var/mysql --plugin-dir=/usr/local/Cellar/mysql/8.0.13/lib/plugin --log-error=***.err --pid-file=/usr/local/var/mysql/***.pid
***            5109   0.0  0.0  4279864      8   ??  S     9 219    0:00.04 /bin/sh /usr/local/Cellar/mysql/8.0.13/bin/mysqld_safe --datadir=/usr/local/var/mysql --pid-file=/usr/local/var/mysql/***.pid
***           40450   0.0  0.0  4268020    788 s000  S+    9:43PM   0:00.01 grep mysql

```

 grep mysql以外を削除。

```
$ kill -9 5208
$ ps aux | grep mysql
[user名]           40460   0.0  0.0  4268020    788 s000  S+    9:45PM   0:00.01 grep mysql
```
削除完了し、以上なしなのでいざ。

```
$ sudo mysql.server restart
Starting MySQL
./usr/local/Cellar/mysql/8.0.15/bin/mysqld_safe: line 144: /usr/local/var/mysql/***.err: Permission denied
/usr/local/Cellar/mysql/8.0.15/bin/mysqld_safe: line 144: /usr/local/var/mysql/***.err: Permission denied
/usr/local/Cellar/mysql/8.0.15/bin/mysqld_safe: line 199: /usr/local/var/mysql/***.err: Permission denied
/usr/local/Cellar/mysql/8.0.15/bin/mysqld_safe: line 144: /usr/local/var/mysql/***.err: Permission denied
 ERROR! The server quit without updating PID file (/usr/local/var/mysql/***.pid).
```
あかんでした。

###やったこと5
.errがでてるようなので削除しました。

```
$ sudo rm /usr/local/var/mysql/***.err
```

確認

```
$ /mysql >  $ ls -la
total 56
drwxr-x---   8 [user名]  wheel    256  2 22 23:13 .
drwxr-xr-x  31 [user名]  wheel    992  2 22 23:42 ..
-rw-r-----   1 [user名]  wheel     35  2 22 23:13 general_log.CSM
-rw-r-----   1 [user名]  wheel      0  2 22 23:13 general_log.CSV
-rw-r-----   1 [user名]  wheel   5575  2 22 23:13 general_log_198.sdi
-rw-r-----   1 [user名]  wheel     35  2 22 23:13 slow_log.CSM
-rw-r-----   1 [user名]  wheel      0  2 22 23:13 slow_log.CSV
-rw-r-----   1 [user名]  wheel  11800  2 22 23:13 slow_log_199.sdi

```
あれ、そもそも.pidファイルがなくない？
ということで作成。

```
$ /mysql > $ touch ***.pid
他ファイルは省略
-rw-r--r--   1 ***  wheel      0  2 22 23:43 ***.pid
```

プロジェクトフォルダに移動して

```
$ sudo mysql.server start
Starting MySQL
.. SUCCESS! 
```

**mysql動きました！！！**

約3時間このエラーとは戦っていました。

調べると権限系の投稿が多々あります。
現行の私の動いている環境での権限は下記です。

####.pidファイルを含めたmysql以下

```
[user名]　wheel
```

####mysql.sock

```
_mysql　_mysql
```

#エラー3　DB接続できない
mysqlが動いたので、`bundle exec rails server`で起動。

するとブラウザで`Unknown database ‘[project名]_development’`
との表示が。

ここでも

`rbenv rehash`やらrailsを入れなおしたりしましたが、下記でサクッと解決しました。


１、プロジェクト内でDB作成

```
$ bundle exec rake db:create:all
Created database '***_development'
Created database '***_test'
Created database '***_production'
```
２、データベースに適応させるため、マイグレーションの実行

```
rbenv exec bundler exec rake db:migrate
== 20181219002213 CreateBlogs: migrating ======================================
-- create_table(:blogs)
   -> 0.0258s
== 20181219002213 CreateBlogs: migrated (0.0259s) =============================

```

#ようやく
`bundle exec rails server`で、作成中のページをローカルで確認できるようになり、構築が完了しました。

Ruby自体触るのが初だったのでかなり苦戦しました。
同じようなエラーに困っている方も多いと思うので参考になれば幸いです。
また、記述ミスや、考え方が間違ってるよと言う意見があればどんどんいただければと思います。

閲覧いただきありがとうございました。