ruby-on-rails – Rails:Carrierwave重新创建的版本不会改变旧
发布时间:2020-12-17 04:04:17 所属栏目:百科 来源:网络整理
导读:我的Rails应用程序使用carrierwave来管理图像上传.我的网站上有图像的水印版本.以前我在它们上面叠加了一个图像,如下所示: def watermark manipulate! do |img| logo = Magick::Image.read("#{Rails.root}/public/images/plc-watermark.png").first img = i
我的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,"Photo ? #{model.user.full_name}nHosted by Placeology.wsnPlease 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,image: "foo_123_d9a346292d.JPG">] 编辑: 实际上,上面的工作与磁盘上的文件,但没有雾.为了让自己变得简单,我最终只是重新创建了图像并删除了旧图像: Image.all.each { |old| new = Image.new(foo_id: old.foo_id,image: old.image) new.save! old.destroy } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |