ActiveStorageが生成したファイルパス(URL)をNo route matches回避のリダイレクト対象外にする
3323 ワード
問題点
存在しないパスへアクセスがあった時に、ルート(/)へリダイレクトさせるルーティング設定をしている環境で、ActiveStorageを利用して画像ファイルを保存していたWEBアプリ上で画像が表示されなくなった。
config/routes.rb
# .
# .
# .
# 本番環境で、
# ルーティングが存在しないパスへアクセス(GET)があった場合に、
# ルート(/)へリダイレクトさせる
if Rails.env.production?
match "*path" , to: redirect('/'), via: 'get'
end
原因
ActiveStorageを利用して取得した画像ファイルのURLがリダイレクトの対象になっていた。
show.html.erb
<%# 画像ファイルを表示 %>
<%= image_tag @user.avatar %>
# HTMLには↓のURLが出力される
# /rails/active_storage/blobs/xxxxx--xxxxx/icon.png
解決策
ActiveStorageを利用して取得する画像ファイルのURLをリダイレクトの対象外にすることで解決した。
参考:Rails Router Catchall Picks Up ActiveStorage Routes · Issue #31228 · rails/rails
config/routes.rb
# .
# .
# .
# 本番環境で、
# ルーティングが存在しないパスへアクセス(GET)があった場合に、
# ルート(/)へリダイレクトさせる
get '*path', to: redirect('/'), constraints: lambda { |req|
# 'rails/active_storage'が含まれているパスはリダイレクト対象外にする
req.path.exclude? 'rails/active_storage'
}
Author And Source
この問題について(ActiveStorageが生成したファイルパス(URL)をNo route matches回避のリダイレクト対象外にする), 我々は、より多くの情報をここで見つけました https://qiita.com/NaokiIshimura/items/0f0e56c159c95b59b11f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .