🚂

Railsチュートリアル13章 ”本番環境での画像アップロード”をやっつける

2022/06/01に公開約2,400字2件のコメント

何も間違ってないのに動かない

タイポもない、公開リポジトリまるまるコピーしても動かない、db:migrateもしてる!
なのに動かない。
そんな人がいたらこの記事が役に立つかもしれません。

先に結論

※以下は記事作成時点での内容なので、時間がたっていたら別のバージョンが必要かもしれません。

gemのバージョンがRailsチュートリアルと同じではうまくいかないっぽいです。
その他のバグも含めて修正するべきは以下三点。
1.aws-sdk-s3を1.48.0に
2.image_processingは最新に
3.mini_magickも最新に

具体的に書くとgemfileがこのようになります。

gem 'aws-sdk-s3',              '1.48.0', require: false
gem 'image_processing'
gem 'mini_magick'
.
.
.

詳しく見ていこう

そもそもどんなエラーが出てたのかというところから見ていきます。
まず、herokuの画面がこんな感じです。

言われた通りにheroku logs --tailします。

これだけではよくわからないのでheroku run consoleで詳しく見てみましょう。

S3関係でRuntimeエラーが出ているようです。
さらに先に読み進めます。

ここでaws-sdk-s3を1.48にすればいいんじゃない?という話になります。
実際にgemfileを書き換えてみます。

gem 'aws-sdk-s3',              '1.48.0', require: false`

bundle installも忘れずに。

無事エラーが解消されました。

しかしだ!

ここで画像をアップロードしてみます。

残念ながら表示されないのです。
これは先ほどのエラーとは関係ないのですが、引き続きこちらの問題も解決します。

とりあえずheroku logs --tailしてみます。

この辺が関係ありそうですが、決め手になりそうなログはありません。
ここで問題を切り分けるため一度S3を直接見てみます。

画像ファイルのアップロードには成功しているのでダウンロード、または表示がうまくいってないということになります。
ここでファイルが入っていない場合はAWSの認証やアップロードに問題がある可能性が高いのでそちらを探ってみてください。

そもそもアップロード成功してるならダウンロードも成功するのでは?表示の問題だとしたらdisplay_image使わなきゃ動くんじゃないの?という気がしたので
/app/views/microposts/_micropost.html.erbでこのようにしてみました。

#<%= image_tag micropost.display_image if micropost.image.attached? %>
<%= image_tag micropost.image if micropost.image.attached? %>

出ました。つまりダウンロードまでは成功していて、画像リサイズの部分が問題になります。
となるとimage_processing、mini_magickのジェムのバージョンが怪しくなってきます。
_micropost.html.erbを元に戻して、gemのバージョン指定を外してみましょう。

gem 'image_processing'
gem 'mini_magick'

bundle installもお忘れなく。

無事表示できました!
これでRailsチュートリアル13章 ”本番環境での画像アップロード”は見事突破できました。
ここまでくれば残る14章でRailsチュートリアル踏破となります。
引き続き頑張りましょう!

Discussion

既にお気づきでしたら恐縮ですが、画像投稿周りの内容が先日アップデートされました! よければお試しいただけると嬉しいです 🙏✨

まさかご本人がいらっしゃるとは!恐縮です!
まだ見ていなかったのでそちらも確認させていただきます。ありがとうございます!

ログインするとコメントできます