Edited at

本番環境でRailsを起動しようとした時のMysql5.7系に関するエラー

同期がハマったエラーが自分もハマった事があったので復習しながら備忘録として


やりたい事


  • EC2インスタンスからGithubへアクセスできるようにする

  • Githubからコードをクローンする

  • unicornをインストールし設定する

  • アセットをコンパイルする

  • Railsを起動する<=ここのエラーを解決する


Rails起動でハマったエラー①


ターミナル

[ec2-user@ip-172-31-23-189 ~]$ rails db:create RAILS_ENV=production

[ec2-user@ip-172-31-23-189 ~]$ rails db:migrate RAILS_ENV=production
[ec2-user@ip-172-31-23-189 ~]$ unicorn_rails -c config/unicorn.rb -E production -D
[ec2-user@ip-172-31-23-189 ~]$ master failed to start, check stderr log for details
//unicorn起動できない
[ec2-user@ip-172-31-23-189 ~]$ less log/unicorn.stderr.log
//エラーログを確認する
Can't connect to local MySQL server through socket '/tmp/mysql.sock(2)'
//ソケット通信できませんと怒られる


原因と解決方法

エラー文最後が(2)の場合はsocketファイルが無い。=>作りましょう!!


ターミナル

$ cd /tmp

$ ls
//my.sockが/tmp以下に無いはず
$ touch mysql.sock
//mysql.sockを/tmp以下に作成
$ sudo service mysqld restart
$ rake db:migrate
//ソケット接続できているのでmigrate完了できるはず
[ec2-user@ip-172-31-23-189 ~]$ unicorn_rails -c config/unicorn.rb -E production -D


Rails起動でハマったエラー②

/tmp以下にmysql.sockを作成してもunicornが起動してくれない。


原因と解決方法

unicornのプロセスがストップできていない=>ストップさせましょう!


ターミナル

[ec2-user@ip-172-31-23-189 ~]$ ps aux | grep unicorn

//unicorn関連のプロセスのみを抽出するgrepコマンド使いましょう
ec2-user 17877 0.4 18.1 588472 182840 ? Sl 01:55 0:02 unicorn_rails master -c config/unicorn.rb -E production -D
ec2-user 17881 0.0 17.3 589088 175164 ? Sl 01:55 0:00 unicorn_rails worker[0] -c config/unicorn.rb -E production -D
ec2-user 17911 0.0 0.2 110532 2180 pts/0 S+ 02:05 0:00 grep --color=auto unicorn
//unicorn_rails masterがunicornのプロセス本体です。こいつをkillします
[ec2-user@ip-172-31-23-189 ~]$ kill -9 <確認したunicorn rails masterPID>
//これでunicornのプロセスはkillされたのでもう一度unicornを起動します
[ec2-user@ip-172-31-23-189 ~]$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D
//これでちゃんとunicornが起動するはず


Rails起動でハマったエラー③

①と②をやってもhttp://< Elastic IP >にアクセスできない


原因と解決方法

ちゃんとmysqlやNginxが再起動できていない。=>もう一度mysqlとNginx(設定済みなら)を停止してunicornをkill→ec2サーバをシャットダウン→再起動します


ターミナル

$ sudo service mysqld stop

//mysqlストップさせる
$ sudo service nginx stop
//nginxストップさせる
$ sudo shutdown -r now
//ec2サーバをストップさせる。これでサーバ内がクリアになる
$ ssh -i 〜〜.pem ec2-user@〜〜
//ec2ログイン。1~2分待ってからログインします
$ sudo service mysqld start
//mysqlスタートさせる
$ sudo service nginx start
//nginxスタートさせる
$ kill -9 <確認したunicorn rails masterPID>
//unicornもう一度killしておきましょ
$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D
//これでunicornが起動


まとめ

awsの自動デプロイができるまで手動でデプロイ設定している最中にmysql関連のエラー多発しました。私の経験ではmysqlをちゃんと停止=>スタートさせてからunicornをkillしてあげれば解決します。socket(mysql.sock)ファイル作れていてもサーバを再起動していなかったり、mysql再起動していなかったり、unicornをkillしていないとhttp://< Elastic IP >にアクセスできないと思うので、まずは再起動する事が一番です!!

例えるなら、

ブラウン管テレビを斜め45度チョップすれば砂嵐が直るみたいな感じです!(違うか)

終わり