[デプロイ作業]開発環境を触って面倒だったこと、知らなかったこと
✒️記事を書いた経緯
現在、ポートフォリオのデプロイ作業中です!
これがまたとーってもトラブル続きで作業が遅延してるので、知らなかったことやよくわかっていなかったことをまとめます。
✅開発環境
今までコードを触っていた環境。
✅本番環境
実際にユーザが使う環境。
デプロイ作業とは、サーバに作ったアプリを配置してユーザが使える状態にすること。
デプロイ作業でやったこと。
- GitHubのリモートリポジトリからRailsアプリを持ってくる
- SCPで秘密鍵と.envファイル(環境変数を定義するファイル、データベースの名前やユーザ名、パスワードなどが保存ざれる)
デプロイ後の修正を行う場合
- まず今まで通り、開発環境で変更したい箇所を修正
- gitにpushする
- 本番環境を一度停止させる。
sudo kill $(cat tmp/pids/puma.pid)
停止していない状態で修正するのは、ベルトコンベアが動いてる状態で作業するようなもの - GitHubにあるリモートリポジトリからpullする
🐥今回起きたエラー
デプロイ後、We're sorry, but something went wrong.
が出てしまった。
ActionView::Template::Error (The asset "no_image" is not present in the asset pipeline.
<%= image_tag "no_image", size: "80x80" %>
上記から "no_image"
の書き方に問題あり。
"no_image"
を "no_image.jpg"
と拡張子をつけることで解決した。
開発系では、 "no_image"
で動作したのに…。
Railsはアセットを動的に読み込むため、自動的に適切な画像ファイルを読み込める。
本番環境では、アセットパイプラインを使用して、静的なファイルとして画像やCSS、JavaScriptなどを、ハッシュ化された名前で提供している。
CSSなどを暗号化したファイルに変えているので、拡張子まで書かないと動作しないらしい。
✅今回知らなかった用語
アッセト
Webアプリケーションで使用される静的なファイル。
.jpg, .pngなど画像ファイル、CSSファイル、JavaScriptファイル
動的に読み込む
アプリケーションが実行されるときに、その都度必要なリソースをサーバーから取得するという意味。
開発環境では、アセット(画像やCSSなど)はファイルシステムにそのまま置かれており、必要なときにアプリケーションがそれを参照する。拡張子を省略しても、Railsがそのリソースを自動的に探し、返してくれるため、動的にリソースを読み込むことができる。
アセットパイプライン
Railsが提供する機能で、Webアプリケーションのパフォーマンス向上のために、アセット(画像、CSS、JavaScriptなど)を最適化・圧縮・一元化する仕組み。
Discussion