【Unicorn】Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2) (Mysql2::Error::ConnectionError)のエラー解決法について

おはようございます。

やっぱりお酒飲んだ次の日は体が回復しきってない感がありますね。

そんな日は無で作業できるのでこれはこれでいいと思ったりします。

今回は丸2日間を費やしてしまったUnicornによるRailsの起動についてブログを書いていきたいと思います。

Unicorn起動に関する知識が深まったのでよしとします。(よくないけど)

僕が見るのもいやになるくらい出まくったエラーがこれです。

Can’t connect to local MySQL server through
socket ‘/tmp/mysql.sock’ (2) (Mysql2::Error::ConnectionError)

よくあるエラーなようですが、ググりながら何をしても突破できませんでした。

ではさっそく行きましょう!

結論

開発環境でおなじみの「Yey!, you're on rails!」の画面は本番環境では表示できません。

そのため、仮でもいいのでコントローラーとビューを用意してルーティングを設定してやる必要があります。

f:id:shun_0211:20200506092429p:plain


僕が2日間ハマってた内容はわずか二行で説明できてしまいました。(涙)


以上、ここまで読んでくださり、ありがとうございました。

役に立ったという方はいいねを、なんかここ違うぞという方はコメント頂けるとうれしいです。では!


(番外編)

完全に自己満メモになりますので、全然まとまってないです。(汗)

二日間でソケットやらTCPやらなんぞ?という単語がいっぱい出てきたので、これを機会に簡単に勉強したので書いていきます。

インターネット

世界中のコンピューター同士を接続するためのネットワーク

プロトコル

コンピューター同士が通信を行うためのルール、通信規約

TCP(transmission control protocol)

データの内容はおいておき、通信デバイス間での通信内容を確実に送受信するためのルール

IP (internet protocol)

IPを定義するための言葉ってなかなか調べても出てこないですね。ぴったりの表現がわからないです。。

IPの主な役割の1つにIPアドレスがあります。


IPアドレス

通信をする際の宛先となる住所を数字とピリオドで表したもの

TCP/IP

インターネットで使われる通信プロトコルのことで、代表的なプロトコルとしてTCPやIPを使っているのでTCP/IPと呼ぶ。

ソケット

プログラムとTCP/IPの世界を結ぶには特別な出入り口が必要になる。その出入り口となるのがソケットですね。

送信したいデータをソケットに書き込むと通信相手のソケットに届くので、受信ではソケットからデータを呼び出せばいい。

ということはソケットの中身を見ればどんなデータを送っているのかわかる??と思い、/var/lib/mysql/mysql.sockの中身を見に行くも何もない。。

また、プログラム側(今回の場合はrails)でのソケットはどこになるのかも分かってない。。それがmysql.sock??

まだまだ理解不足です。もっと勉強せねば・・・

memo

unicorn起動前には必ず$ ps aux | grep unicornUnicornのプロセスを確認してkillすること
mysqlの起動と接続を忘れないこと
sudo service mysqld start
mysql -u root -p
Unicornが起動しない場合には、/var/www/<アプリ名>/log//unicorn.stderr.logコマンドをうち込み、エラー文を確認すること
・エラー文が下文である場合、参照しているソケットの場所を確認すること
mysql_config --socket
Can’t connect to local MySQL server through
socket ‘/tmp/mysql.sock’ (2) (Mysql2::Error::ConnectionError)
・ソケットファイルがあるか確認する(勝手に消えることがあるらしい)
・ソケットの設定ファイルがあるらしい(my.cnf)


大変お世話になったサイトです。(ほんとにありがとう)

参考サイト
ƒ\ƒPƒbƒg
知ったかぶりをしていたソケット通信の基礎を改めて学んでみる - Qiita
知っておきたいTCP/IP入門編 - Qiita