gpt4 book ai didi

ruby-on-rails - rails : Carrierwave recreate versions does not change old images

转载 作者:行者123 更新时间:2023-12-04 22:24:22 27 4
gpt4 key购买 nike

我的 Rails 应用程序使用carrierwave 来管理图像上传。我的网站上有图像的水印版本。以前我在它们上面叠加了一个图像,如下所示:

def watermark
manipulate! do |img|
logo = Magick::Image.read("#{Rails.root}/public/images/plc-watermark.png").first
img = img.composite(logo, Magick::SouthEastGravity, Magick::OverCompositeOp)
end
end

现在我正在覆盖文本,如下所示:
def watermark
manipulate! do |img|
text = Magick::Draw.new
text.gravity = Magick::CenterGravity
text.pointsize = 12
text.font = "#{Rails.root}/public/fonts/hn300.ttf"
text.stroke = 'none'
text.annotate(img, 0, 0, 0, 0, "Photo © #{model.user.full_name}\nHosted by Placeology.ws\nPlease log in to remove this watermark")
img
end
end

现在,这适用于新图像,但是当我调用 recreate_versions 时!旧照片不更换。我怎样才能得到这个新水印来代替旧水印?

值得一提的是,我将 Fog 与 Amazon S3 一起用于开发和生产中的存储。

最佳答案

这可能不是完全相同的问题,但对于 googleability:

我们在文件名中有一个随机散列,类似于 this discussion thread 中描述的内容。

重新生成图像时,它会使用新的散列生成新图像,但不会更新存储在数据库中的文件名,因此它会尝试使用旧名称显示图像。

这重现了问题:

bundle exec rails runner "Foo.find(123).images.each { |img| uploader = img.image; puts %{before: #{img.image.inspect}}; uploader.recreate_versions!; puts %{after: #{img.reload.image.inspect}} }; p Foo.find(123).images"

它给出了类似的输出
before: /uploads/foo_123_6a34e47ef5.JPG
after: /uploads/foo_123_d9a346292d.JPG
[#<Image id: 456, foo_id: 123, image: "foo_123_6a34e47ef5.JPG">]

但是在重新创建版本后添加 img.save! 可以修复它:
bundle exec rails runner "Foo.find(123).images.each { |img| uploader = img.image; puts %{before: #{img.image.inspect}}; uploader.recreate_versions!; img.save!; puts %{after: #{img.reload.image.inspect}} }; p Foo.find(123).images"

有输出:
before: /uploads/foo_123_6a34e47ef5.JPG
after: /uploads/foo_123_d9a346292d.JPG
[#<Image id: 456, foo_id: 123, image: "foo_123_d9a346292d.JPG">]

编辑:

实际上,上述内容适用于磁盘上的文件,但不适用于雾。为了让自己更轻松,我最终只是重新创建图像并删除旧图像:
Image.all.each { |old|
new = Image.new(foo_id: old.foo_id, image: old.image)
new.save!
old.destroy
}

关于ruby-on-rails - rails : Carrierwave recreate versions does not change old images,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7195650/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com