画像を投稿できるアプリを作成したのですが、本番環境(heroku)で投稿した画像をマイページで確認できる機能を確認しようとしたところ、エラーが発生しました。
herokuのログを確認するとimage_tagの箇所でエラーが起きておりました。
ActionView::Template::Error (undefined method `decode' for URI:Module):
というエラーです。
調べてもdecodeに関する情報が少ないのですが、これはどういうエラーなのでしょうか?
バージョン
ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux]
Rails 6.1.7
エラーログ
2022-12-31T09:56:17.582496+00:00 app[web.1]: I, [2022-12-31T09:56:17.582463 #4] INFO -- : [11d421a8-a463-4609-aa8d-bcb583eb6595] Completed 500 Internal Server Error in 45ms (ActiveRecord: 12.4ms | Allocations: 18639) 2022-12-31T09:56:17.583544+00:00 app[web.1]: F, [2022-12-31T09:56:17.583499 #4] FATAL -- : [11d421a8-a463-4609-aa8d-bcb583eb6595] 2022-12-31T09:56:17.583546+00:00 app[web.1]: [11d421a8-a463-4609-aa8d-bcb583eb6595] ActionView::Template::Error (undefined method `decode' for URI:Module): 2022-12-31T09:56:17.583546+00:00 app[web.1]: [11d421a8-a463-4609-aa8d-bcb583eb6595] 66: <% @my_plans.each do |plan| %> 2022-12-31T09:56:17.583546+00:00 app[web.1]: [11d421a8-a463-4609-aa8d-bcb583eb6595] 67: <div class="card" style="width: 210px;"> 2022-12-31T09:56:17.583547+00:00 app[web.1]: [11d421a8-a463-4609-aa8d-bcb583eb6595] 68: <a href="/plans/<%= plan.id %>" target="_blank" rel="noopener noreferrer" class="text-dark"> 2022-12-31T09:56:17.583548+00:00 app[web.1]: [11d421a8-a463-4609-aa8d-bcb583eb6595] 69: <p><%= image_tag(plan.photo.url, :alt => '最新投稿') %></p> 2022-12-31T09:56:17.583548+00:00 app[web.1]: [11d421a8-a463-4609-aa8d-bcb583eb6595] 70: <div class="card-body"> 2022-12-31T09:56:17.583548+00:00 app[web.1]: [11d421a8-a463-4609-aa8d-bcb583eb6595] 71: <h5 class="card-title"><p><%= plan.user.name %></p></h5> 2022-12-31T09:56:17.583549+00:00 app[web.1]: [11d421a8-a463-4609-aa8d-bcb583eb6595] 72: <h6 class="card-text"><p><%= plan.title %></p></h6> 2022-12-31T09:56:17.583549+00:00 app[web.1]: [11d421a8-a463-4609-aa8d-bcb583eb6595] 2022-12-31T09:56:17.583550+00:00 app[web.1]: [11d421a8-a463-4609-aa8d-bcb583eb6595] app/views/users/show.html.erb:69 2022-12-31T09:56:17.583550+00:00 app[web.1]: [11d421a8-a463-4609-aa8d-bcb583eb6595] app/views/users/show.html.erb:66
エラー箇所のview
<% if @my_plans.any? %> <div class="my-page-contents"> <% @my_plans.each do |plan| %>! <div class="card" style="width: 210px;"> <a href="/plans/<%= plan.id %>" target="_blank" rel="noopener noreferrer" class="text-dark"> <p><%= image_tag(plan.photo.url, :alt => '最新投稿') %></p> ←エラー箇所 <div class="card-body"> <h5 class="card-title"><p><%= plan.user.name %></p></h5> <h6 class="card-text"><p><%= plan.title %></p></h6> </div> </a> </div> <% end %> </div> <div class="d-flex justify-content-center mb-2"> <%= paginate @my_plans %> </div> <% else %>
- plan.photo.url の中身はどうなってますか?
- localでは成功してますか?
- image_tag の引数に固定のテキストを渡すとどうなりますか?
- plan.photo.url の中身はどうなってますか?
投稿した画像のファイル名が入っています。
- localでは成功してますか?
localでは成功しており、表示されます。
- image_tag の引数に固定のテキストを渡すとどうなりますか?
ロゴなども画像を作成しており、image_tagに固定のファイル名を渡しているのですが、
それは本番環境でも表示されました。
plan.photo.url と同じURLを固定のテキストで引数として渡すとどうなりますか?
plan.photo.urlのファイル名はassets/imagesに入れておけば、表示されました。
eachでループしてる中の plan.photo.url に変なデータがあったりしませんでしょうか
すみません。
追加で分かったことなのですが、プロフィール画像を表示するimage_tagも同様のエラーで表示されませんでした。
ループの中身は今、確認中です。
plan.photo.urlの中身に変なデータは入っていませんでした。
photoカラムにも拡張子までしっかり入っておりました。
以前、簡単な画像投稿アプリを作成しまして、そのアプリはherokuでも表示されました。
なのでその時と同じ、carrierwaveとcloudinaryを使用したやり方で、作成しました。
ログを消して頂きました。
each の中の特定の要素でだけエラーが起こるのか、それともどの要素でもエラーが起こるのかなどから原因を切り分けられませんでしょうか
each文のない、plans/showページで画像が確認できるか、試してみたところ同じエラーが発生しました。
つまりeach文、関係なくエラーが起きました。
上記のエラー箇所をimage_tagを外して確認してみたところ、エラーがなくなりeach文が機能したので、
投稿された画像の表示のimage_tagに限ったエラーなのかなと考えました。
.urlとで表示するmage_tagだけがdecodeのエラーが発生しました。
画像管理をしてくれるcloudinaryを入れているのですが、それがエラーに関係している
可能性がありますでしょうか?
「.urlとで表示するmage_tag」って何なんでしょう?
.url拡張子のファイルを image_tag で表示させようとしているということでしょうか
=>.url拡張子のファイルを image_tag で表示させようとしているということでしょうか
はい。
<p><%= image_tag(plan.photo.url, :alt => '最新投稿') %></p>
のようなplan.photo.urlをimage_tagで表示させたい記述、全てがherokuでデコードエラーを起こしてしまいました。
Completed 500 Internal Server Error in 45ms (ActiveRecord: 12.4ms | Allocations: 18639)
とログに出てたりするのですが、
herokuのサーバーか、こちらのサーバー周りの設定がいけないのかなとも考えたのですが
その可能性はありますか?