自動デプロイ時に遭遇したエラー

今回は実際に遭遇したエラーに関しての備忘録です。

まずは、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

          ffi

 

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のみで接続出来たという事がありました。

 

以上で今回の記事は終わります。

またエラーが起きたら備忘録として記事にしていくつもりです!

まぁ、起きないのが一番なんですけどね・・・