デプロイで最低限抑えるべきポイント3選
ぞす!げんきちです!\\\\٩( 'ω' )و ////
「いや、誰だよ」って方は、下記リンクを見てやってください。
目次〜
最近AWSを学習しています。
初学者の身としては、railsから急にインフラっぽくなって面食らってます。
そこでメンターさんと相談しながら要点を絞りました。
かなり備忘録的にですが、まとめました...🙇♂️
デプロイで最低限抑えるべきポイント3選
・ブラウザ→Webサーバ→アプリケーションサーバという流れを理解できる。
・ログの場所がわかり、エラーログなどを確認ができる。
・ソケットとかlistenがわかり、サーバ間の接続を確認できる。
きっかけ
Capistranoを設定して、自動デプロイしたら画面が壊れました。
原因は、assetsファイルの指定時にスペルミスしてました/(^o^)\
Railsの仕事
アセットパイプラインとは
JavaScriptやCSSのアセットを最小化 (minify: スペースや改行を詰めるなど) または圧縮して連結するためのフレームワーク。
spockets-rails gemによって実装され、デフォルトで有効になっている。
主要な機能
①アセットを連結すること
ブラウザがWebページをレンダリングするためのリクエスト数を減らせる。
SprocketsはすべてのJavaScriptファイルを1つのマスター.jsファイルに連結し、すべてのCSSファイルを1つのマスター.cssファイルに連結してくれる。
②アセットの最小化 (一種の圧縮)
例:ホワイトスペースとコメントを削除すること。
とりあえず、railsでは以下の仕事まで行う。
public/aseets配下にあるアセットファイルをプレコンパイルする。
ターミナル
プレコンパイルとは
= pre(事前に)、コンパイル(変換)すること。
= 前もって読み込みやすい状態にしておくこと。
このプレコンパイルされた情報をWebサーバ(Nginx)が見られるように設定する。
Nginxの仕事
設定
/etc/nginx/conf.d/rails.conf
listen 80 ≒ 80番ポートにいったらNginxが待っているイメージ。
通信はデフォルトで80番ポートにいく。
:80は、省略可能。
役割
クライアントから/var/www/<アプリケーション名>/public;の処理をリクエストされた場合は、自分でレスポンスを返す。
それ以外の場合、動的なコンテンツの生成をアプリケーションサーバ(Unicorn)に依頼する。
Unicornとの接続口(Unicornのソケットファイルが存在する場所)も指定する。
Unicornの仕事
設定
/etc/nginx/conf.d/rails.conf
Unicornにも、unix:/var/www/<アプリケーション名>/tmp/sockets/unicorn.sock;で待っていてくれるように(listen状態に)設定する。
config/unicorn.rb
また、プロセスIDやエラーの記録場所も指定する。
以下のコマンドでエラーが確認できます。
stderr = standard errorの略 = 標準エラー出力先。
ここまでで無事に以下の道が通りました!
①ブラウザ →
②Webサーバ(Nginx)→
この後の流れです。
Rack→
アプリケーション(rails)
Rackというミドルウェアが翻訳をすることで、アプリケーションサーバとアプリケーション本体がコミュニケーションを取ることができる。
railsの場合、Rackはデフォルトで備わっているため、設定は必要ない。
まとめ(?)
今回は②のNginxのroot指定が以下のようになっていたことが原因でした。
正)root /var/www/<アプリケーション名>/current/public;
誤】root /var/www/<アプリケーション名>/curent/public;
つまり、存在しないディレクトリを指定していたために、アセットファイルが適用されていなかったことを理解することができました。
<一日一新>
新校舎。机の下が広くて足を組みやすい。
<学習進捗>
学習開始からの期間 :91日
今日までの合計時間:896h
今日までに到達すべき目標時間:829h
目標との解離:67h
「10,000時間」まで、
残り・・・「9,104時間!」
以上です。
読んでくれた方々、ありがとうございました!((_ _ (´ω` )ペコ。