🍇

[デプロイ作業]開発環境を触って面倒だったこと、知らなかったこと

2025/01/20に公開

✒️記事を書いた経緯

現在、ポートフォリオのデプロイ作業中です!
これがまたとーってもトラブル続きで作業が遅延してるので、知らなかったことやよくわかっていなかったことをまとめます。


✅開発環境

今までコードを触っていた環境。

✅本番環境

実際にユーザが使う環境。
デプロイ作業とは、サーバに作ったアプリを配置してユーザが使える状態にすること。

デプロイ作業でやったこと。

  • 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