Railsチュートリアル13章 ”本番環境での画像アップロード”をやっつける
何も間違ってないのに動かない
タイポもない、公開リポジトリまるまるコピーしても動かない、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
既にお気づきでしたら恐縮ですが、画像投稿周りの内容が先日アップデートされました! よければお試しいただけると嬉しいです 🙏✨
まさかご本人がいらっしゃるとは!恐縮です!
まだ見ていなかったのでそちらも確認させていただきます。ありがとうございます!