同期がハマったエラーが自分もハマった事があったので復習しながら備忘録として
##やりたい事
- 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度チョップすれば砂嵐が直るみたいな感じです!(違うか)
終わり