デプロイで躓いたところ

f:id:ryoutaku_jo:20190119022152p:plain

【結論】
・デプロイでは、下記の理由でエラー特定が困難な場合が多い
 ・コードが残らない
 ・設定箇所が多岐に亘る
 ・ログにエラー箇所が直接的に明示されていない

・これらに対処出来るようになるには、
 通信全体の仕組みと、各種パッケージの仕組みを理解し、
 場数を踏んでいく必要がある。

・デプロイに限らず、自分が書いているコードが
 どのような処理を行っているか、きちんと理解しないと
 急なトラブルに対応ができない。


【目次】


【本題】

冷静になってみて

この投稿の続きです
ryoutaku-jo.hatenablog.com

前回はちょっとテンションがおかしかったですが、
今回はきちんと躓いた部分をまとめていきたいと思います。

エラー特定の困難さ

今回デプロイをするにあたって、
アプリケーション開発に無いエラー特定の難しさを感じました。
それは、下記の3つです。


・コードに残らない

アプリケーション開発では、
スペルミスをしたとしても、
それがコードとして残ります。

対して、デプロイに関しては、
・EC2インスタンスの設定
・本番環境へのパッケージの導入
MySQLのパスワード設定
・git-secretsの条件を設定・・・など
コードに残らない設定が多々あり、
過去の処理を正しく行えたか、追うのが困難になります。


・設定箇所が多岐に亘る

アプリ開発であれば、少し記述しては、
動作検証をするという事を習慣化させれば、
エラーが発生しても、直近に記述した内容を
見返すだけで、簡単にエラーが特定出来るケースが多いです。

対して、デプロイでは、一つを機能させる為の
設定箇所が多岐に亘る為、一通り作業を終えてからで無いと
検証ができず、エラーが発生した場合に見返す箇所が多くなってしまいます。


・エラーログでエラー箇所まで特定できない

Railsのエラー画面やJavaScriptのコンソールであれば、
ご丁寧にエラーが発生している箇所のコードを表示してくれるし、
エラー特定の手掛かりを掴みやすいです。

対して、デプロイにもmysql起動時などに起こったエラーを
ログから見れるように設定できますが、
エラー箇所が明示されていない為、
それだけでエラー箇所を特定する事が困難です。

エラーへの対策

これらを柔軟に対処するには、
サーバーやデータベースのメカニズムや
各種パッケージの仕組みを理解した上で、
場数を踏んで行くしか無いのかと感じました。

アプリ開発でも同様の事が言えますが、
デプロイについては、その必要性をより強く感じさせられました。

次に、実際に今回のデプロイで
発生したエラーを列挙していきます。

Uglifier::Error: Unexpected character '`'

これはサーバー側でRailsを起動できなかった時に発生したエラーです。

The deploy has failed with an error: Exception while executing as ec2-user@**********: rake exit status: 1
rake stdout: Nothing written
rake stderr: rake aborted!
Uglifier::Error: Unexpected character '`'

これは、この投稿が役立ちました。
taremimi.hatenablog.jp

アクセスキーの設定ミス

次はCapistranoを利用した自動デプロイで発生したエラーです。

Access denied for user 'root'@'localhost' (using password: YES)

これは、MySQL 5.6 リファレンスマニュアルが参考になりました。
dev.mysql.com

プロセスが二つ走っていた

次はunicornが起動できないエラーです。

`bind': Address already in use - bind(2) for 0.0.0.0:3000

これは次の投稿が参考になりました。
hyottokoaloha.hatenablog.com

f:id:ryoutaku_jo:20190119023438p:plain

なぜか二つプロセスが動いていて、killしたら直りました。

誤字脱字

その他にも、誤字脱字で動かなくなる事象もありました。

単純なことに、多くの時間を費やしたことで、
とにかく慎重に記述していく事が必要だと感じました。


《今日の学習進捗》

とりあえずデプロイは完了。
ポートフォリオの作成に着手する。


学習開始からの期間 :42日
今日までの合計時間:414h
今日までに到達すべき目標時間:384h
目標との解離:30h
「10,000時間」まで、

残り・・・「9586時間!」