Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

やりたい事

  • 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 masterのPID>
//これで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 masterのPID>
//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度チョップすれば砂嵐が直るみたいな感じです!(違うか)

終わり

suzy1031
駆け出しエンジニア。ruby rails jQuery AWS Java React
https://suzyanamateurengineer.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away