首页 > 解决方案 > 如何让 Rails 5 上的 avatar.variant(size: "200x200") 在生产中使用 aws 工作?

问题描述

在生产中使用云提供商时,我无法让 user.avatar.variant(resize: "200x200") 工作,因为它使用我的网站路径而不是 aws。

<%= image_tag user.avatar.variant(resize: "200x200") %> 

# Current Output
<img src="https://mywebsite.com/rails/active_storage/representations/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCdz09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--3f8b21aebb9ca4fc9fe9043a1acc3e77e999319a/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCam9MY21WemFYcGxTU0lLTVRCNE1UQUdPZ1pGVkE9PSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--6b94a1495d331d40bee31fadf0e8dc9323a7e1bc/image.jpg">

# Should be
<img src="aws.com/img.jpg">

我需要 user.avatar.service_url.split("?").first 来获得 img 的正确路径,但是当我这样做时,我不能使用 .variant() 因为该路径是一个字符串。

# this works but can't resize    
<%= image_tag user.avatar.service_url.split("?").first %> 

知道我是如何克服这个问题的。

谢谢!

标签: ruby-on-railsruby-on-rails-5

解决方案


我从 gorails.com 的 Chris Oliver 那里得到了这个答案:

“ActiveStorage URL 总是通过你的 Rails 应用程序。这就是他们如何在不预先计算的情况下即时生成调整大小的 200x200。这是现在使用 ActiveStorage 的主要缺点。

在 Rails 的未来版本中,他们将可以选择使用 AWS 的直接 URL,但您现在不能这样做。

如果你今天想要这个功能,你最好使用 Shrine 来上传文件。”

我认为这很有用,这就是我决定在这里分享它的原因。


推荐阅读