未定义的方法操作! - 带有 minimagick 的载波

Undefined method manipulate! - carrierwave with minimagick

我正在使用 carrierwave 和 minimagick 上传图像并将其裁剪成正方形。但是我收到以下错误:

undefined method 'manipulate!' for #<Class:0x692db10>

这似乎没有意义,因为我包含了正确的 class,并且该部分工作正常。这是我当前的上传者 class.

class ImageUploader < CarrierWave::Uploader::Base

  include CarrierWave::MiniMagick

  @@sizes = {
    "2000" => 2048,
    "1500" => 1500,
    "1000" => 1024,
    "500" => 512,
    "250" => 256,
    "100" => 128
  }

  storage :file

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  version :square do
    manipulate! do |img|
      size = img.dimensions.min
    end
    process resize_to_fill: [size, size]
  end
end

明确地说,我们谈论的是 :square 版本。有谁知道哪里出了问题?

似乎 manipulate! 属于 RMagick adapter, for MiniMagick 你应该使用像 mogrify.

这样的东西

确实有这样的方法,但你试图在 class 范围内使用它,而它是一个实例方法。有一个 bunch of useful class methods 你已经可以使用了。

如果你还需要manipulate!,做这样的东西:

process :radial_blur => 10

def radial_blur(amount)
  manipulate! do |img|
    img.radial_blur(amount)
    img = yield(img) if block_given?
    img
  end
end