人生100年!生涯エンジニア人生!

楽しいエンジニア人生!

Ruby on Railsの勉強 少々はまる

結論

Herokuなどにdeployするときは、事前に rake assets:precompile を行ってからdeployをする。
もしくは、ソース編集した後に bundle install してからdeployする。

何が起きたか?

Herokuにdeployしたら、「the page you were looking for doesn't exist.」と言う画面が出ました。
f:id:hideaki_kawahara:20180528000849p:plain
つまり404、表示するものが無いってことです。
ローカル(AWS cloud9)では、この現象が発生しません。

アセットパイプライン

色々と検索すると、アセットパイプラインというのが影響しているのが解る。
railsguides.jp

アセットパイプラインの第一の機能はアセットを連結することです。これにより、ブラウザがWebページをレンダリングするためのリクエスト数を減らすことができます。Webブラウザが同時に処理できるリクエスト数には限りがあるため、同時リクエスト数を減らすことができればその分読み込みが高速になります。

要するに、jsとかcssが、一つのファイルにまとめられており、サーバーで動作するときは、プリコンパイルされたファイルを読むことなる。
Herokuはproduction設定としてあるので、この条件に合致する。
しかし、最初の勉強の時は、引っかからなかった、それはなぜか?
kawahara-ci.hatenablog.com

手順を振り返る

第1章の時は、以下の順番で作業をしています。

  1. gemファイル編集
  2. bundle install
  3. rails server
  4. ソース編集
  5. gemファイル再編集
  6. bundle install --without production
  7. Herokuにdeploy

はまった時は、以下の順番で作業をしています。

  1. gemファイル編集
  2. bundle install --without production
  3. ソース編集
  4. Herokuにdeploy

なるほど!第1章の時は、ソース編集後に、 bundle install をしている!
だから、はまらなかった訳です。
deployする前に、 bundle install をすれば、いいんじゃないと思ったけど、問題はアセットパイプラインがプリコンパイルされていないだけなので、rake assets:precompile するのが正しいです。

Ruby on Rails 5アプリケーションプログラミング

Ruby on Rails 5アプリケーションプログラミング