LoginSignup
5
0

More than 3 years have passed since last update.

【Rails】Active Storageでアップロードした画像が表示されなくなったので、原因を調べた

Last updated at Posted at 2019-07-02

はじめに

結論として、画像が表示されなくなった原因は、
Routing Error対策としてroutes.rb

match "*path" => "application#error404", via: :all

を書き込んだのが原因であった。

事象の説明

開発中にActive Storageでアップロードしたはずの画像が表示されなくなってしまいした。
スクリーンショット 2019-07-02 14.03.17.png
こいつが

スクリーンショット 2019-07-02 14.02.53.png

こんな感じになってしまった。

原因となっていたrouting error対策の説明

スクリーンショット 2019-07-03 0.53.22.png

routeに存在しないurlでアクセスすると、上記のようにRouting Errorとなり、
HTTP status code 404がレスポンスされる。
これが面倒なので、「routeに存在しないアクセスをすると、root_pathにリダイレクト」という処理を行った。

application_controller.rb
  def error404
    redirect_to root_path, alert: "エラーが発生しました"
  end
routes.rb



  match "*path" => "application#error404", via: :all
end

routes.rbの一番最後の行にmatch "*path" => "application#error404", via: :allと記述することによって、
「それまでにマッチしなかった全てのルートはapplication_controllererror404が呼び出される」
という処理がされる。

原因の理由

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の一行を削除すると直る。:hugging:

スクリーンショット 2019-07-02 14.02.53.png

スクリーンショット 2019-07-02 14.03.17.png

おわりに

画像表示のためにRouting Error対策は諦めてしまったのだが、
何かうまい方法はないものか。:thinking:

5
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0