Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
11
Help us understand the problem. What is going on with this article?
@mknstone

active storageの画像がリンク切れする

More than 3 years have passed since last update.

問題

Rails 5.2.0.beta2で開発中、何故か画像がリンク切れする。
コードはドキュメント通り書いている。画像も指定の場所に上がっている。

app/views/accounts/show.html.slim
= image_tag url_for(@account.avatar)

原因

route.rb でのエラー処理の記述が問題だった。
route.rbの一番最後に、以下のように記述して、エラーページを表示していた。

config/route.rb
Rails.application.routes.draw do
  ...
  get "*path", controller: 'application', action: 'error404', via: :all
end

ところが、ActiveStrageは画像のリンクを、以下のように見ているらしい。

rails/activestorage/config/routes.rb
Rails.application.routes.draw do
  get "/rails/active_storage/blobs/:signed_id/*filename" => "active_storage/blobs#show", as: :rails_service_blob, internal: true
  ...
end

project/config/route.rbrails/activestorage/config/routes.rbよりも先に呼ばれるので、画像を呼ぶ前に、エラーページの方を呼んでしまう。

解決方法

エラーハンドリングに関する別の問題(上記のrouteでの記述では、RoutingErrorをキャッチできない)の記事を参考にした。
それと同じ方法でエラー処理するようにしたら解決した。

以下のファイルを作成して、route.rbの記述を削除。サーバを再起動する。

config/initilizers/exceptions_app.rb
Rails.application.configure do
  config.exceptions_app = ErrorsController.action(:show)
end
app/controllers/error_controller.rb
class ErrorsController < ApplicationController

  skip_after_action :verify_authorized

  layout 'application'

  rescue_from StandardError, with: :error500
  rescue_from ActionController::RoutingError, with: :error404
  rescue_from ActiveRecord::RecordNotFound, with: :error404

  def error404(exception = nil)
    logger.info "Rendering 404 with exception: #{exception.message}" if exception
    render template: 'errors/error404', status: 404
  end

  def error500(exception = nil)
    logger.info "Rendering 500 with exception: #{exception.message}" if exception
    render template: 'errors/error500', status: 500
  end

  def show
   raise
  end
end

詳細は以下の参考のリンクから。

参考

11
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
mknstone
ほぼ個人用メモです。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
11
Help us understand the problem. What is going on with this article?