質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

Q&A

0回答

727閲覧

Railsを6.1.3.2にアップデートするとS3に保存している画像へのURLが変わってしまう

t_tanaka1859

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

0グッド

0クリップ

投稿2021/06/04 03:06

編集2021/06/05 07:06

私たちのシステムでは、RailsのActiveStorageを使用して画像を管理しています。
今回、Railsを6.0.3.6から6.1.3.2にアップデートしたところ下記のような問題が発生しました。
同様の問題を見つけきれなかったため質問させていただきます。原因や解決方法をご教示いただきたいです。

発生している問題

S3に保存している画像へのURLがアップデート前後で変わってしまい、アップデート前に保存していた画像が表示できない

再現するための手順

  • Railsを6.0.3.6から6.1.3.2にアップデート
  • rails active_storage:updateを実行
  • rails db:migrateを実行
  • アップデート前に保存していた画像が表示されるページを開く

ソースコード

# 対象のクラス class Image < ApplicationRecord include ActiveStorageSupport::SupportForBase64 after_commit :process_variants has_one_base64_attached :file def provider_file_url key = file.variant(resize_to_limit: [500, 500]).key "#{ENV[‘BASE_URL']}/#{key}" end private def process_variants return unless file.attachment file.variant(resize_to_limit: [500, 500]).processed rescue StandardError nil end end # URLの呼び出し image_instance.provider_file_url

期待される動作

アップデート前後で同じURLが生成される

実際の動作

アップデート前後で、生成されるURLが異なる

例:
アップデート前

https://sample.net/variants/zvd2z2dafhrht3yy99l8w9zw54h8/3a8af9a41326f81dcc439e015ab90b5d9d078e2b00dd7d021c4d4ee650e5c6e0

アップデート後

https://sample.net/variants/zvd2z2dafhrht3yy99l8w9zw54h8/ac54d233b136b9f97f4d984f115d2e1c4695c2a0a3994c28d347637301445431

調査したこと

ActiveStorageの6.0.3.66.1.3.2の動作を比較したところ、以下のような違いがありました。
しかしこの原因まではたどり着けていません。

↓の2箇所にデバッグコード」を追加

ActiveStorage::Variantクラスのinitialize(ソースコード

class ActiveStorage::Variant 省略 def initialize(blob, variation_or_variation_key) p '-----------------------------------------------------------------------------------------' p 'blob' p blob p 'variation_or_variation_key' p variation_or_variation_key p '-----------------------------------------------------------------------------------------' @blob, @variation = blob, ActiveStorage::Variation.wrap(variation_or_variation_key) end 省略 end

ActiveStorage::Variationクラスのencodeメソッド(ソースコード

class ActiveStorage::Variation attr_reader :transformations class << self 省略 def encode(transformations) p '-----------------------------------------------------------------------------------------' p transformations p '-----------------------------------------------------------------------------------------' ActiveStorage.verifier.generate(transformations, purpose: :variation) end end 省略 end

provider_file_urlメソッドを実行


ActiveStorage6.0.3.6

"-----------------------------------------------------------------------------------------" "blob" #<ActiveStorage::Blob id: 999, key: "zvd2z2dafhrht3yy99l8w9zw54h7", filename: "sample.jpg", content_type: "image/jpeg", metadata: {"identified"=>true, "analyzed"=>true}, byte_size: 15789, checksum: "NwtXS6KRF1ty1WxXMicUew==", created_at: "2021-06-02 08:32:15"> "variation_or_variation_key" {:resize_to_limit=>[500, 500]} "-----------------------------------------------------------------------------------------"

ActiveStorage6.1.3.2

"-----------------------------------------------------------------------------------------" "blob" #<ActiveStorage::Blob id: 999, key: "zvd2z2dafhrht3yy99l8w9zw54h7", filename: "sample.jpg", content_type: "image/jpeg", metadata: {"identified"=>true, "analyzed"=>true}, byte_size: 15789, checksum: "NwtXS6KRF1ty1WxXMicUew==", created_at: "2021-06-02 17:32:15.000000000 +0900", service_name: "amazon"> "variation_or_variation_key" #<ActiveStorage::Variation:0x00007fa2db230430 @transformations={:format=>"jpg", :resize_to_limit=>[500, 500]}> "-----------------------------------------------------------------------------------------"


ActiveStorage6.0.3.6

"-----------------------------------------------------------------------------------------" {:resize_to_limit=>[500, 500]} "-----------------------------------------------------------------------------------------"

ActiveStorage6.1.3.2

"-----------------------------------------------------------------------------------------" {:format=>"jpg", :resize_to_limit=>[500, 500]} "-----------------------------------------------------------------------------------------"

試しに、encodeメソッドにformatキーを削除する処理を入れたところ、アップデート前と同様のURLが生成されるようになりました。

システム構成

アップデート前

Rails: 6.0.3.6
Ruby: 2.6.6
Gemfile.lock

activestorage (6.0.3.6) actionpack (= 6.0.3.6) activejob (= 6.0.3.6) activerecord (= 6.0.3.6) marcel (~> 1.0.0)

アップデート後

Rails: 6.1.3.2
Ruby: 2.6.6
Gemfile.lock

activestorage (6.1.3.2) actionpack (= 6.1.3.2) activejob (= 6.1.3.2) activerecord (= 6.1.3.2) activesupport (= 6.1.3.2) marcel (~> 1.0.0) mini_mime (~> 1.0.2)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問