#はじめに
結論として、画像が表示されなくなった原因は、
**Routing Error対策
**としてroutes.rb
に
match "*path" => "application#error404", via: :all
を書き込んだのが原因であった。
事象の説明
開発中にActive Storageでアップロードしたはずの画像が表示されなくなってしまいした。
こいつが
↓
こんな感じになってしまった。
原因となっていたrouting error対策の説明
routeに存在しないurlでアクセスすると、上記のように**Routing Error
**となり、
HTTP status code 404
がレスポンスされる。
これが面倒なので、「routeに存在しないアクセスをすると、root_pathにリダイレクト」という処理を行った。
def error404
redirect_to root_path, alert: "エラーが発生しました"
end
・
・
・
match "*path" => "application#error404", via: :all
end
routes.rbの一番最後の行にmatch "*path" => "application#error404", via: :all
と記述することによって、
「それまでにマッチしなかった全てのルートはapplication_controllerの**error404
**が呼び出される」
という処理がされる。
原因の理由
rails routes
でルートを確認してみると、**Active Storage
に関するルートより先にRouting Error
**対策のルートが記述されている。
$ rails routes
・
・
・
letter_opener_web /letter_opener LetterOpenerWeb::Engine
/*path(.:format) application#error404
rails_service_blob GET /rails/active_storage/blobs/:signed_id/*filename(.:format) active_storage/blobs#show
rails_blob_representation GET /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations#show
rails_disk_service GET /rails/active_storage/disk/:encoded_key/*filename(.:format) active_storage/disk#show
update_rails_disk_service PUT /rails/active_storage/disk/:encoded_token(.:format) active_storage/disk#update
rails_direct_uploads POST /rails/active_storage/direct_uploads(.:format) active_storage/direct_uploads#create
つまり、Active Storageに関するルートが読まれるよりも前に、「それまでにマッチしなかった全てのルートは……」が読まれてしまう。
どうやらActive Storageに関するルートはroutes.rb
を読み込んだ後に記述されるらしい。。。
現にmatch "*path" => "application#error404", via: :all
の一行を削除すると直る。
#おわりに
画像表示のためにRouting Error対策は諦めてしまったのだが、
何かうまい方法はないものか。