自動デプロイ時に遭遇したエラー
今回は実際に遭遇したエラーに関しての備忘録です。
まずは、Uglifier::Error: Unexpected character '`'
assetsデプロイ時のエラーです。
これは javascriptの記述が引っ掛かって起きているようで、
バッククォート「 ` 」が原因となっているみたいです。
javascriptのES6に基づいた記述をRails側で通してくれないために起きるエラーなので、
javascript内でバッククォートの記述を変更してあげ、
ex) バッククォート使用を → シングルクォートにして、
${変数}で呼んでる変数を「 + 変数 + 」というように記述する。
もしくは、アプリケーションフォルダ内部の
config/environments/production.rb内の記述を
config.assets.js_compressor = :uglifier を
config.assets.js_compressor = Uglifier.new(harmony: true)
とした上で、
config.assets.compile = false を
config.assets.compile = true
と変更
falseのままだとデプロイ後にcssや画像を読み込まない原因となる場合があるため、trueにしておくと良いと思います。
次に、
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
私の場合、エラー文を読んでいくと
In Gemfile:
sass-rails was resolved to 5.0.7, which depends on
sass was resolved to 3.7.4, which depends on
sass-listen was resolved to 4.0.0, which depends on
rb-inotify was resolved to 0.10.0, which depends on
Tasks: TOP => deploy:updated => bundler:install
と書いてあったので、どうも一部gemのバージョンがサーバー側と違うためにエラーを吐いているのではという推測を立ててサーバー側のgemをupdateしようとしました。
サーバー側にsshでログインし、
/var/www/アプリ名 に移動
bundle updateをしたら・・・
ffiのupdateでフリーズを起こしました・・・
こういうサーバー側のエラーは本当にサーバー関連初心者には心臓に悪いです。。。
この後、EC2を再起動、しばらくログインできない状態が続いた後、
再度ログインして、
gem update を実行、何とかffiのupdateが通り、デプロイも通りました!
その他、単純な理由のエラー等
この辺りは本当に何で見落としていたのかというエラーです。
特に、EC2を再起動した後等、初心者は注意するべき点であると思いました。
この前に書いた上記のエラー解消後、実は
Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)
というエラーが出ました。
またか!?と思いながらエラーを調べてsocket関係かな?
と思いつつ調べている途中に、ふと・・・Mysql起動したっけ?と頭を過ぎりました。
そこで早速サーバー内のMysqlのstatusをチェック、
sudo service mysqld status を実行すると・・・
起動してない事が分かったので、
sudo service mysqld start を実行、
これで無事にデプロイが通った、という事がありました。
また、もう一つ、これもEC2インスタンスを再起動後の話ですが、
なぜかElasticIPにアクセスしても
ERR_CONNECTION_REFUSED と表示され、
アクセス出来ないという事が起こりました。
ElasticIP/3000だとアクセスできるのに何で?と長時間解消できなかった事がありました。
いくらgoogle先生に頼って探しても解消しないので遂にメンターの方に頼ることを決意しました。(応用に入ってから初だったので聞くまでの準備も大変でした。。。)
前回書いた記事のエラーの調べ方もこの時にパクった感じで凄く勉強になりました、というのは置いといて何が原因だったのかというと、
nginxの起動がされてないもしくはポートが通ってないのが理由でした。
AWS側でのポート開放は確認したところ大丈夫だったので、
sudo service nginx restart を実行、
nginxを再起動したらElasticIPのみで接続出来たという事がありました。
以上で今回の記事は終わります。
またエラーが起きたら備忘録として記事にしていくつもりです!
まぁ、起きないのが一番なんですけどね・・・