5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】デプロイ後に「We're sorry, but something went wrong.」のエラーが出る

Last updated at Posted at 2020-05-10

Railsでアプリを作成し、AWSにデプロイした際に不具合があるとこんなエラー画面が表示されます。
こいつめっちゃ腹立ちますよね。だってどこがおかしいのかすぐに教えてくれないんですよ。

image.png

#エラー原因の確認方法

しょうがないので自分で何がおかしいのかを確認します。

ターミナル
[ec2-user@ip-~~]$ cd /var/www/(アプリ名)/current/
[ec2-user@ip-~~ current]$ less log/production.log

ログを見ていくと、下記のようなエラー文を発見

ActionView::Template::Error (The asset "(画像ファイル名)" is not present in the asset pipeline.):

今回は画像ファイルの読み込みで何か問題が起きていることを特定します。

#原因
作成中のアプリでは、画像ファイルは下記に保管し、image_tagによって開発環境(ローカル)では問題なく表示されていました。

画像ファイル保管先
app/assets/images
haml(html)ファイル
= image_tag("ファイル名")

ではなぜ本番環境では読み込みができていないのか?
それは開発環境と本番環境でimagesディレクトリへのパスが異なるためです。
デプロイを実行すると、アセットパイプラインという機能によって画像ファイルやCSSファイルがコンパイル(圧縮)されます。すると、以下のようにimagesディレクトリへのパスが変化します。

アセットコンパイル前(開発環境)
app/assets/images

アセットコンパイル後(本番環境)
public/assets/images

#解決方法
HTMLファイルにはasset_pathを、CSSファイルにはimage-urlを適用することで、開発環境でも本番環境でも問題なく画像を表示することができます。

HTMLファイル
image_tag asset_path('ファイル名')
#ファイル名には「.jpg」など拡張子を忘れずに!
cssファイル
background-image: image-url("ファイル名");
#ファイル名には.jpgなど拡張子を忘れずに

今回は画像の読み込みに関するエラーでしたが、デプロイ時のエラーはEC2インスタンスや
Unicorn, nginx, SQLの再起動などで解消するケースもあるみたいです。
まずは、ログを見に行って原因を特定することが大事ですね。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?