-
Notifications
You must be signed in to change notification settings - Fork 71
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ユーザーアイコンの画像のURLが表示の度に変わるので、変わらないようにしたい。 #7225
Comments
@komagata @machida お手隙の際にご確認いただき、認識のおかしな点やこの対応の方向性で問題ないかなど、レスポンスを頂戴できるとありがたいです。 サマリ
詳細画像URLが取得されるまでの流れと、パブリックアクセス設定について※ https://bootcamp.fjord.jp/reports/88644 の日報でも同内容をまとめております。 もともと、開発環境で私が「ユーザーアイコンの画像のURLが表示の度に変わる」という現象に遭遇したのは、下のIssueに取り組む際に、APIを通してユーザーが持つ通知の一覧をフェッチしたときでした。 通知一覧をフェッチしたときに含まれるアイコン画像のURLは、 # app/views/api/users/_user.json.jbuilder
# ...
json.(user, *columns)
json.avatar_url user.avatar_url
# ...
# Userモデル
def avatar_url
default_image_path = '/images/users/avatars/default.png'
if avatar.attached?
# ActiveStorage::Blob#urlでブロブ(画像ファイルそのもの)のurlを取得する
avatar.variant(resize: AVATAR_SIZE).processed.url
else
image_url default_image_path
end
rescue ActiveStorage::FileNotFoundError, ActiveStorage::InvariableError
image_url default_image_path
end
https://api.rubyonrails.org/v7.1/classes/ActiveStorage/Blob.html#method-i-url とあり、「パブリックなファイルなら(使用しているストレージサービスの)永続URLを返し、プライベートファイルなら期限付きURLを返す。」となっています。 # config/storage.yml
local:
service: Disk
root: <%= Rails.root.join("storage") %>
google:
service: GCS
project: "bootcamp-224405"
credentials: <%= Base64.decode64(ENV["GOOGLE_CREDENTIALS"].to_s) %>
bucket: <%= ENV["GCS_BUCKET"] %>
public: true 本番のプロフィールページの自分のアイコン画像のURLを確認→ページを更新し再度確認→最初のときとURLが変わっていないことを確認しました。 一方、開発環境では上記の設定がなされていないため、 対応の方向について本番環境では本Issueの問題は起きていませんが、開発環境では local:
service: Disk
root: <%= Rails.root.join("storage") %>
public: true #追加する 開発環境でもパブリックアクセス設定を行えば、本番と同じ挙動をするようになります。 railsコンソールによる検証検証内容
変更前 -> 二回の結果が異なる = アバターのURLが取得するたびに変わってしまっている
パブリックアクセスに変更後 -> 二回の結果が同じ = アバターのURLが変わっていない
|
質問タイムで話した通り、上記の方向性で問題ないです〜 質問タイムの話から進んだ点としては |
@komagata
はい、その通りです。 それでは、上記の方向で対応します。 |
本件、開発・テスト環境においてActiveStrogeのパブリックアクセスを許可する修正PRがマージされました。
本番環境には影響のない変更のため、本Issueはこちらでクローズとさせていただきます。 |
キャッシュができないので。
/users/1234/icon
みたいなURLで永続的にアイコンが表示できると良い。ただ、効率的なキャッシュされるかなどをActiveStorageの機能と合わせてうまく使う必要があります。
(ActiveStorageはあまり知られてない機能がたくさん合ったりするので)
The text was updated successfully, but these errors were encountered: