请求时生成imagemagick / carrierwave缩略图

时间:2011-11-07 15:43:07

标签: ruby-on-rails ruby rmagick carrierwave

我在Rails应用程序中使用带有Rmagick的carrierwave gem。我在我的上传器文件中设置了一个新版本:

class ImageUploader < CarrierWave::Uploader::Base   
  include CarrierWave::RMagick
  storage :file
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end
  version :preview do
     process :resize_to_fill => [580, 350]
  end
end

当然,我在我的gemfile中包含了rmagick和carrierwave。现在我尝试在我的视图中加载我的图像的预览版本:

@product.photos.first.image.preview

这不会产生任何错误,但会加载损坏的图像。如果我复制图像的网址,我会收到路由错误('无路由匹配/path/to_my_imagesfolder/preview_image.png')。如果我删除了预览方法,则图片会正确加载。

问题是什么?我想也许这是一个权限问题,但我将uploads文件夹设置为777但仍然失败。

有什么想法吗?

编辑:我意识到如果我再次上传图片,则会创建新版本。有没有可能让Rmagick在被请求时创建它们(就像TimThumb在PHP中那样)或者至少是否有任何命令批量创建所有版本?

必须有比上传所有图片更好的方法......

2 个答案:

答案 0 :(得分:10)

您可以使用.recreate_versions!

例如:

Product.all.each do |product|
  product.photos.each do |photo|
    photo.recreate_versions!
  end
end

答案 1 :(得分:0)